Eff is a functional language with handlers of not only exceptions, but also of other computational effects such as state or I/O. With handlers, you can simply implement transactions, redirections, backtracking, multi-threading, and much more…

Reasons to like Eff

Effects are first-class citizens

Eff is built around a powerful uniform representation of effects, which allows you to seamlessly combine effects (no dos, no monad transformers), override existing effects and define your own effects.

Precise control over 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.

Strong theoretical foundations

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: