PROPOSAL: Make Applicative a superclass of Monad
Isaac Dupree
isaacdupree at charter.net
Mon Jun 30 06:53:53 EDT 2008
Ashley Yakeley wrote:
> For example:
>
> class Functor f => Applicative f where
> return :: a -> f a
> ap :: f (a -> b) -> f a -> f b
> (>>) :: f a -> f b -> f b
> (>>) = liftA2 (const id)
for backwards compatibility of everyone who *uses* Applicative, (and
arguably it is a less ugly notation,) :
(<*>) = ap
(and pure = return)
I'm not sure, is the word "ap" even as well known as "<*>" right now? I
wonder which one we'd prefer to use in Applicative?
> class Applicative m => Monad m where
> (>>=) :: m a -> (a -> m b) -> m b
> fail :: String -> m a
> fail s = error s
I want to add to this Applicative=>Monad class:
join :: m (m a) -> m a
join mm = mm >>= id
m >>= f = join (fmap f m)
What do others think about that?
(P.S. And I guess this hierarchy change is quite independent of the
difficult task of removing "fail" from Monad, so I won't discuss that
here/now)
-Isaac
More information about the Haskell-prime
mailing list