Legend:
Library
Module
Module type
Parameter
Class
Class type
Result of computation.
Result of an expression evaluation depends on a context. Thus, each result has a unique identifier, associated with it, that is usually provided by a context. The result is a concrete value, that is created whenever an expression is evaluated under a given context. Since, context is changed during the evaluation (at least because a new result is allocated), two consecutive evaluations of the same expression will give different results. (This property is preserved by Expi.context class, that provides methods for creating values of type result).
Since Result.Id is a regular type, it is possible to associate arbitrary information (like taint information, formulae, etc) with each result, using associative data structures, like maps and hash tables.