The Wikipedia article on Effect system is currently just a short stub and I've been wondering for a while as to what is an effect system.
- Are there any languages that have an effect system in addition to a type system?
- What would a possible (hypothetical) notation in a mainstream language, that you're familiar, with look like with effects?
A "type and effect system" describes not only the kinds of values in a program, but the changes in those values. "Typestate" checking is a related idea.
An example might be a type system that tracks file handles: instead of having a function
close
with return typevoid
, the type system would record the effect ofclose
as disposing of the file resource—any attempt to read from or write to the file after callingclose
would become a type error.I'm not aware of any type and effect system appearing in a mainstream programming language. They have been used to define static analyses (for example, it's quite natural to define an analysis for proper locking/unlocking in terms of effects). As such, effect systems are usually defined using inference schemes rather than concrete syntax. You could imagine a syntax looking something like
If you want to learn more, the following papers might be interesting (fair warning: the papers are quite theoretical).