Eq1, Ord1, Show1: move from eq1, compare1, showsPrec1 to liftEq, liftCompare, liftShowsPrec
Henning Thielemann
lemming at henning-thielemann.de
Mon Jan 11 18:55:40 UTC 2016
- Previous message: Eq1, Ord1, Show1: move from eq1, compare1, showsPrec1 to liftEq, liftCompare, liftShowsPrec
- Next message: Eq1, Ord1, Show1: move from eq1, compare1, showsPrec1 to liftEq, liftCompare, liftShowsPrec
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
On Mon, 11 Jan 2016, Ryan Scott wrote:
>> What are the use cases where eq1 was not powerful enough and liftEq is needed?
>
> The previous type signature of Data.Functor.Classes in
> transformers-0.4 resulted in some awkward instances, a prime example
> being found in Data.Functor.Compose:
>
> import Data.Functor.Classes(Eq1(..))
>
> newtype Compose f g a = Compose (f (g a))
> instance (Functor f, Eq1 f, Eq1 g, Eq a) => Eq (Compose f g a) where
> Compose x == Compose y = eq1 (fmap Apply x) (fmap Apply y)
> instance (Functor f, Eq1 f, Eq1 g) => Eq1 (Compose f g) where eq1 = (==)
>
> newtype Apply g a = Apply (g a)
> instance (Eq1 g, Eq a) => Eq (Apply g a) where
> Apply x == Apply y = eq1 x y
Btw. I already defined my own Apply type (I called it Wrap) because I
found it useful. Would you mind to export it from 'transformers'?
- Previous message: Eq1, Ord1, Show1: move from eq1, compare1, showsPrec1 to liftEq, liftCompare, liftShowsPrec
- Next message: Eq1, Ord1, Show1: move from eq1, compare1, showsPrec1 to liftEq, liftCompare, liftShowsPrec
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Libraries
mailing list