Lightweight Polymorphic Effects
Type-and-effect systems are a well-studied approach for reasoning about the computational behavior of programs. Nevertheless, there is only one example of an effect system that has been adopted in a wide-spread industrial language: Java's checked exceptions. The authors believe that the main obstacle to using effect systems in day-to-day programming is their verbosity, especially when writing functions that are polymorphic in the effect of their argument. To overcome this issue, they propose a new syntactically lightweight technique for writing effect-polymorphic functions. They show its independence from a specific kind of side-effect by embedding it into a generic and extensible framework for checking effects of multiple domains. Finally, they verify the expressiveness and practicality of the system by implementing it for the Scala programming language.