@hackage effectful-plugin1.1.0.4
A GHC plugin for improving disambiguation of effects.
Installation
Tested Compilers
Dependencies (5)
- base >=4.14 && <5
- containers >=0.5
- effectful-core >=1.0.0.0 && <3.0.0.0
- ghc >=8.10 && <9.13
- ghc-tcplugins-extra >=0.3 && <0.5 Show all…
Dependents (5)
@hackage/axel, @hackage/cabal-cache, @hackage/effectful-zoo, @hackage/katip-effectful, @hackage/co-log-effectful
effectful-plugin
A GHC plugin for improving disambiguation of effects.
Usage
To enable the plugin, add the following GHC option to your project file:
ghc-options: -fplugin=Effectful.Plugin
What it does
The following code:
action :: (State Int :> es, State String :> es) => Eff es ()
action = do
x <- get
put (x + 1)
will not compile out of the box because GHC doesn't know that you meant to
get an Int since the function + as well as the literal 1 are
polymorphic. You have to write:
action :: (State Int :> es, State String :> es) => Eff es ()
action = do
x <- get @Int
put (x + 1)
Which is slightly annoying. This plugin tells GHC extra information so code
like this can type-check without having to spell types to the compiler.
Acknowledgements
Thanks to Xy Ren for her work on
cleff-plugin
effectful-plugin is based on.