[Haskell-cafe] Unique functor instance

Janis Voigtlaender voigt at tcs.inf.tu-dresden.de
Tue Nov 25 08:42:14 EST 2008


Claus Reinke wrote:
>> Luke Palmer wrote:
>>
>>> I've been wondering, is it ever possible to have two (extensionally)
>>> different Functor instances for the same type?  I do mean in Haskell;
>>> i.e. (,) doesn't count.  I've failed to either come up with any
>>> examples or prove that they all must be the same using the laws.
>>
>>
>> For "not-too-exotic" datatypes, in particular for algebraic data types
>> with polynomial structure (no exponentials, embedded function types, and
>> other nasties), I would conjecture that indeed there is always exactly
>> one Functor instance satisfying the identity and composition laws.
> 
> 
> Are identity and composition sufficient to guarantee that the
> mapped function is actually applied?
> 
>     instance Functor f where fmap _ x = x

Such an fmap will not have the required type

   (a -> b) -> f a -> f b

Consider "fmap even". Then a=Int, b=Bool, x::f Int,
(fmap even x)::f Bool, type error since you assumed fmap even x = x !

Ciao, Janis.

-- 
Dr. Janis Voigtlaender
http://wwwtcs.inf.tu-dresden.de/~voigt/
mailto:voigt at tcs.inf.tu-dresden.de



More information about the Haskell-Cafe mailing list