Personal tools

User:Zzo38/Proposal about classes

From HaskellWiki

< User:Zzo38
Revision as of 20:17, 3 September 2011 by Zzo38 (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

This document is proposal relating to various things dealing with classes in Haskell.

Contents

1 Monads

Move join into the Monad class, to allow monads to defined in terms of unit/join/fmap. Together with things described below, it can automatically be Functor as well, and define fmap if you are using return/bind definitions.

2 Default superclass definitions

For example, for monads you can have:

class Functor m => Monad (m :: * -> *) where {
  (>>=) :: forall a b. m a -> (a -> m b) -> m b;
  (>>) :: forall a b. m a -> m b -> m b;
  return :: a -> m a;
  join :: m (m a) -> m a;
  fail :: String -> m a;
  a >>= f = join $ fmap f a;
  m >> k = m >>= \_ -> k;
  join = (>>= id);
  fail = error;
  fmap f m = m >>= return . f;
};

In this case, you can define the defaults for Functor if they are not already defined.

3 Restrictive classes

For example, make a restrictive monad that only contains instances of Ord. I am not sure about syntax or other details.

4 Classes of classes

See proposal of kinds.