Control.Effects is a Haskell library for programming with effects, like in the the Eff language by Andrej Bauer and Matija Pretnar. Effects can be used instead of monad transformers, they are designed to be easier to use and to define.
cabal install effects
Here's an example how to use the state effect from
example :: (Int, Int) example = run $ do with (ref 5) $ \x -> do with (ref 10) $ \y -> do x =: (+) <$> get x <*> get y y =: (+) <$> get x <*> get y (,) <$> get x <*> get y
Every instance of an effect is given a name (
y in this example), which makes is possible to easily mix several instances of the same effect.