Janis Voigtlaender <voigt <at> tcs.inf.tu-dresden.de> writes:

> 
> DavidA wrote:
> > I suspect that the answer to the question is, yes, you can have different 
> > Functor instances. All you need is a sum-product type that it's possible 
to 
> > interpret as two different abstractions, leading to two different Functor 
> > instances.
> 
> The sum-product types are exactly the "not-too-exotic" types to which my
> proof applies. So as long as extensional equivalence means Haskell
> equivalence, and not some "modulo an interpretation" equivalence (like
> considering two lists equivalent if they contain the same elements but
> in potentially different order), the answer is no, one cannot have
> different funtor instances.
> 
> Ciao, Janis.
> 

Okay, I see. Well that's interesting, because it suggests that your proof 
might break under modest extensions to the language.

The thing that led me to suggest list / set as an example was consideration of 
Data.Set. Conceptually, this should be a Functor instance - given f :: a -> b, 
we should be able to derive fmap f :: Data.Set a -> Data.Set b, eg
fmap f xs = (fromList . map f . toList) xs
However, we can't currently express this in Haskell, because Data.Set requires 
Ord a.

However, there have been some proposals to fix this. I assume that if they 
went through, then it would be possible to define a type which could be 
interpreted as either a list or a set, with different functor instances in 
either case.



_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to