IDE Support for Lexical Effects and Handlers

Static type systems help to avoid programming errors by indicating to the programmer at compile time that a value potentially has a wrong type. This way, unsupported operations (such as dividing two strings or calling a method on a number) are ruled out before the program is executed.

Effect systems extend these guarantees and indicate to the programmer that a computation has potentially unexpected (side) effects, such as writing to the terminal, reading from a database, or throwing an exception. This way, unexpected side effects (such as uncaught exceptions) are ruled out before the program is executed. Additionally, programmers obtain new modes of reasoning about their programs. For instance, knowing that two computations are free of side-effects, we can safely run them in parallel without risking data races or deadlocks.

Languages with static type systems often leverage the types to offer tool support, for instance as part of an IDE. Knowing the type of an expression, it is possible to improve autocompletion, jump-to-definition, and many more features.


The tooling support for effect systems is still largely unexplored. As part of this thesis, you will improve the IDE implementation for the new “Effekt” language. You will develop novel ways to visualize and navigate through programs that use effects.



“Algebraic effects and handlers offer a new way to express computational effects in functional programming languages. Using the Effekt language and Microsoft Visual Studio Code, we discuss and partially implement ideas for novel IDE features to sup- port the usage of effects and handlers. We conclude that research in the overlapping field of effects and handlers and user support through programming environment tools is sparse. Supportive features common for other language constructs may be adaptable to effects and handlers. To some users the proposed features may be helpful in reasoning about and writing code with effects and handlers. Further research is needed to ascertain the usefulness of our proposals.”


Thesis Slides

Additional Material


Jonathan Brachthäuser