This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow stackage.org to host generated Haddocks.
This package implements effects, as alternative to monad
transformers. Actually, the effects themselves are created without
the use of TH, but the binding of nested effects described by
mkEff splice. For example.
mkEff "MyReader" ''Reader ''Int ''Lift
mkEff "SomeState" ''State ''Bool ''MyReader
mkEff "OtherRdr" ''Reader ''Float ''SomeState
main:: IO ()
main = do
r <- runMyReader 100
$ runSomeState False
$ runOtherRdr pi $ do
i :: Int <- ask -- MyReader
f :: Float <- ask -- OtherRdr
b <- get -- SomeState
put $ not b -- SomeState
lift $ putStrLn "print from effect!" -- Lift
return $ show $ fromIntegral i * f
print r
For more information about extensible effects , see the original paper at
http://okmij.org/ftp/Haskell/extensible/exteff.pdf.
But, this package is significantly different from the original.
It uses a chains of ordinary GADTs created by TH.
No Typeable, no unsafe... , no ExistentialQuantification ...