Eff is a functional programming language based on algebraic effect handlers. This means that Eff provides handlers of not only exceptions, but of any computational effect, allowing you to redirect output, wrap state modifications in transactions, schedule asynchronous threads, and much much more…

Try it out in your browser!

or install it on your computer

Algebraic effects, on which Eff is built, give rise to a uniform representation of all computational effects. Effects are thus first-class citizens of Eff and can be seamlessly combined. There is no need for the do notation, no need for monad transformers, and no need to reshuffle your whole program just to read a global flag.

Just like exceptions are a particular instance of an effect, exception handlers are a particular instance of effect handlers. In Eff, you can silence standard output, redirect it to a different channel, or even rearrange it. Similarly, state modifications can be prevented or grouped in transactions.