packages feed

effectful-plugin-1.0.0.0: README.md

# `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.