rmonad provides a restricted monad class in the Control.RMonad hierarchy.
The class makes use of associated datatypes (available in GHC 6.8),
using an idea learnt from Wolfgang Jeltsch:
http://www.haskell.org/pipermail/haskell-cafe/2008-March/041084.html
It also provides a way to treat a restricted monad as a normal monad
using a generic wrapper type. This idea is described here:
http://hsenag.livejournal.com/11803.html?nc=5
See the haddock documentation for information on how to use it.
darcs get http://code.haskell.org/rmonad
TODO
Add instances for all the mtl stuff. Consider also doing this for mtl-tf
(namespacing issues?)
Add all the normal monad combinators
Should we use Monad etc rather than RMonad etc for naming?
- Pro: standard modern namespacing conventions
- Anti: Module names need to be different to allow co-existence
Do we actually want RApplicative etc? Nasty because most restrictions aren't much use on function types
DSELs are a good example of where Suitable could be closed over function types