[Haskell-cafe] tuple and HList
David Menendez
zednenem at psualum.com
Mon Mar 21 19:17:40 EST 2005
Frederik Eaton writes:
> > You need to swap the arguments to TCons...
> >
> > data TCons l a = TCons !l a
> >
> > Then:
> >
> > instance Functor (TCons (TCons HNil a)) where
> > fmap f (TCons (TCons HNil x) y) = TCons (TCons HNil (f x)) y)
>
> How does one solve this problem in general, i.e. when the arguments to
> a type are in the wrong order for an instance that one wants to
> declare?
In general? You either make a newtype or change the definition of the
original type.
> Someone on the haskell IRC channel mentioned that if you could derive
> instances for partially applied type synonyms then one could just
> make a dummy synonym with the arguments in the right order, but that
> doesn't appear to be premitted. The other question is why isn't it
> permitted.
As I understand it, the reason you can't do instances for partially
applied type synonyms is because it makes instance selection ambiguous.
For example:
instance Functor ((,) a) where fmap f (x,y) = (x, f y)
type RevPair a b = (b,a)
instance Functor (RevPair a) where fmap f (x,y) = (f x, y)
If I write 'fmap f (x,y)', do I get '(f x, y)' or '(x, f y)'?
--
David Menendez <zednenem at psualum.com> <http://www.eyrie.org/~zednenem/>
More information about the Haskell-Cafe
mailing list