User:Zzo38/Proposal about classes
From HaskellWiki
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.
