# `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: ```haskell action :: [State Int, 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: ```haskell action :: [State Int, 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](https://hackage.haskell.org/package/cleff-plugin) `effectful-plugin` is based on.