*Eff* is built around a powerful uniform representation of effects,
which allows you to
seamlessly combine effects (no `do`

s, no monad transformers),
override existing effects
and define your own effects.

*Eff* infers not only the type of the result, but also the set of all effects that may happen when computing it.
To boot, handlers allow you to change an effectful computation into one bound to be pure.

*Eff* was built to test the mathematical ideas of algebraic effects in practice.
Thus, every new feature of *Eff* is backed by peer-reviewed research.

The best place to start is to try
the online version of *Eff*,
which also comes with a few examples that show the main features of *Eff*.
Then, to learn more about the theoretical background, you can read
An Introduction to Algebraic Effects and Handlers.
When you are ready to get your hands dirty, download the source code,
which is freely available on Github.

If you want to know more about the theory, take a look at:

- the paper Programming with Algebraic Effects and Handlers,
which introduces
*Eff* - the paper An Effect System for Algebraic Effects and Handlers,
which describes the effect system of
*Eff* - the paper Inferring Algebraic Effects,
which describes the algorithm that
*Eff*uses to infer effects - the paper Handling Algebraic Effects, which describes the mathematical background of handlers
- old Mathematics and Computation posts about Eff (beware that some of them are fairly old and talk about an outdated version of Eff)