monadclasses alternatives and similar packages
Based on the "monad" category.
Alternatively, view monadclasses alternatives based on common mentions on social networks and blogs.

monadcontrol
Lift control operations, like exception catching, through monad transformers 
monadtime
Type class for monads which carry the notion of the current time. 
monadunliftref
Typeclasses for representing monad (transformer) morphisms 
monadunlift
Typeclasses for representing monad (transformer) morphisms 
monadloggerprefix
Easily add a prefix to your MonadLogger output. 
monadvalidate
A Haskell monad transformer library for data validation 
monadbatcher
An applicative monad that batches commands for later more efficient execution 
monadioadapter
A Haskell package that adapts between MonadIO and MonadBase IO 
monadsupply
Support for computations which consume values from a (possibly infinite) supply. 
monadtask
Task monad transformer that turns event processing into coroutines programming. 
monadresumption
Resumption and ReactiveResumption Monads for the Haskell programming language. 
monadloopsstm
STMspecific control operators (split out of monadloops as of version 0.4) 
monadinterleave
Monads with an unsaveInterleaveIOlike operation 
monadintrospect
A reader monad that gives the environment access to the entire transformer stack 
monadopen
Openended computation for when you need it (open recursion) 
monadpeel
Lift control operations like exception catching through monad transformers 
monadfinally
Guard monadic computations with cleanup actions 
monadcontrolaligned
Lift control operations, like exception catching, through monad transformers 
monadcontrolidentity
Stronger classes than monadcontrol
Scout APM: A developer's best friend. Try free for 14days
Do you think we are missing an alternative of monadclasses or a related project?
README
See this series of articles for the detailed description and motivation.
This is a more flexible version of mtl, the monad transformers library.
You can have many layers of e.g. state transformers in your stack, and you don't have to explicitly lift your
get
s andput
s, as soon as different state transformers carry different types of states.Example:
a :: (MonadState Bool m, MonadState Int m) => m () a = do put False  set the boolean state modify (+ (1 :: Int))  modify the integer state
mtl requires Θ(n2) instances (like
MonadReader e (StateT s m)
); monadclasses requires only Θ(n) of them (where n is the number of different transformer types).If you'd like to define your own monadclassesstyle class, you have to write much less boilerplate code.