Haskell Foldable Wats
David Feuer
david.feuer at gmail.com
Wed Feb 24 16:38:56 UTC 2016
On Wed, Feb 24, 2016 at 11:22 AM, Kosyrev Serge <_deepfire at feelingofgreen.ru
> wrote:
>
> Are you also saying that this cannot be resolved by some kind of a
> type families-based type-level 'flip'?
>
It really can't, no. You can define
type family FlipF f a b where
FlipF f a b = f b a
but FlipF, being a type family, is not first-class. You can't make any
instances whatsoever for FlipF f a -- you'll probably get an error about a
partially applied type family. What you *can* do is make a Flip newtype:
newtype Flip f a b = Flip {unflip :: f b a}
This behaves perfectly:
instance Bifunctor f => Functor (Flip f a) where
fmap f = Flip . first f . unflip
instance Profunctor f => Contravariant (Flip f a) where
contramap f = Flip . lmap f . unflip
instance Bifunctor f => Bifunctor (Flip f) where
bimap f g (Flip x) = Flip (bimap g f x)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/libraries/attachments/20160224/6d55018c/attachment.html>
More information about the Libraries
mailing list