monad-classes alternatives and similar packages
Based on the "monad" category.
Alternatively, view monad-classes alternatives based on common mentions on social networks and blogs.
-
monad-validate
(NOTE: REPOSITORY MOVED TO NEW OWNER: https://github.com/lexi-lambda/monad-validate) A Haskell monad transformer library for data validation -
monad-control
Lift control operations, like exception catching, through monad transformers -
monad-time
Type class for monads which carry the notion of the current time. -
monad-unlift-ref
Typeclasses for representing monad (transformer) morphisms -
monad-unlift
Typeclasses for representing monad (transformer) morphisms -
monad-logger-prefix
Easily add a prefix to your MonadLogger output. -
monad-batcher
An applicative monad that batches commands for later more efficient execution -
monad-supply
Support for computations which consume values from a (possibly infinite) supply. -
monad-io-adapter
A Haskell package that adapts between MonadIO and MonadBase IO -
monad-task
Task monad transformer that turns event processing into co-routines programming. -
monad-resumption
Resumption and Reactive-Resumption Monads for the Haskell programming language. -
monad-loops-stm
STM-specific control operators (split out of monad-loops as of version 0.4) -
monad-introspect
A reader monad that gives the environment access to the entire transformer stack -
monad-open
Open-ended computation for when you need it (open recursion) -
monad-control-identity
Stronger classes than monad-control -
monad-peel
Lift control operations like exception catching through monad transformers -
monad-interleave
Monads with an unsaveInterleaveIO-like operation -
monad-control-aligned
Lift control operations, like exception catching, through monad transformers -
monad-finally
Guard monadic computations with cleanup actions
Free Global Payroll designed for tech teams
Do you think we are missing an alternative of monad-classes 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)
); monad-classes requires only Θ(n) of them (where n is the number of different transformer types).If you'd like to define your own monad-classes-style class, you have to write much less boilerplate code.