[Haskell-cafe] Rank-2 types in classes
limestrael at gmail.com
Wed Mar 2 13:30:43 CET 2011
Thank you !
Is what I'm trying to do a common technique to type-ensure contexts or are
there simpler methods?
2011/3/2 Max Bolingbroke <batterseapower at hotmail.com>
> On 2 March 2011 09:11, Yves Parès <limestrael at gmail.com> wrote:
> > class (forall x. Monad (IM i x)) => Impl i where
> > data IM i :: * -> * -> *
> > But GHC forbids me to do so.
> The way I usually work around this is by doing something like the
> following pattern:
> class Monad1 m where
> return1 :: a -> m x a
> bind1 :: m x a -> (a -> m x b) -> m x b
> instance Monad1 (IM MyI) where
> return1 = ...
> bind1 = ...
> instance Monad1 m => Monad (m x) where
> return = return1
> (>>=) = bind1
> Your class can now have a (Monad1 (IM i)) superclass context. You will
> have to enable a few extensions to get this through - most likely
> FlexibleInstances and OverlappingInstances.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Haskell-Cafe