Tony Morris wrote:
> As a side note, I think a direct superclass of Functor for Monad is not
> a good idea, just sayin'
> 
> class Functor f where
>   fmap :: (a -> b) -> f a -> f b
> 
> class Functor f => Apply f where
>   (<*>) :: f (a -> b) -> f a -> f b
> 
> class Apply f => Bind f where
>   (=<<) :: (a -> f b) -> f a -> f b
> 
> class Apply f => Applicative f where
>   unit :: a -> f a
> 
> class (Applicative f, Bind f) => Monad f where
> 
> Same goes for Comonad (e.g. [] has (=<<) but not counit)
> ... and again for Monoid, Category, I could go on...

Hi Tony

even though I dismissed your mentioning this on the Haskell' list, I do have 
to admit that the proposal has a certain elegance. However, before I buy 
into this scheme, I'd like to see some striking examples for types with 
natural (or at least useful) Apply and Bind instances that cannot be made 
Applicative resp. Monad. Also, it is not clear to me what laws should hold 
for them.

Cheers
-- 
Ben Franksen
()  ascii ribbon campaign - against html e-mail 
/\  www.asciiribbon.org   - against proprietary attachments


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to