HaskellWiki

Haskell | Wiki community | Recent changes
Random page | Special pages

 

Not logged in
Log in | Help

Create an account if you don't have one.

Functor hierarchy proposal

Categories: Proposals | Functor

Currently the standard libraries include a Functor class and a Monad class, and Functor is not a superclass of Monad, even though logically every monad is a functor. New classes have been added to HEAD to create a richer hierarchy of Functor classes:

class Functor f where
  fmap :: (a -> b) -> f a -> f b
 
class Functor f => Applicative f where
  pure :: a -> f a
  (<*>) :: f (a -> b) -> f a -> f b
 
(*>) :: Applicative f => f a -> f b -> f b
  fa *> fb = (fmap (const id) fa) <*> fb

I propose that "pure" be renamed "return", "*>" be renamed ">>", and that Monad be made a subclass of Applicative:

class (Applicative f) => Monad f where
  (>>=) :: f a -> (a -> f b) -> f b

The downside of this is that every instance declaration of Monad would have to be accompanied by instance declarations for the superclasses, but see Class system extension proposal.

Retrieved from "http://haskell.org/haskellwiki/Functor_hierarchy_proposal"

This page has been accessed 4,838 times. This page was last modified 21:19, 1 November 2009. Recent content is available under a simple permissive license.