A state monad which is strict in the state s, but lazy in the
value a.
See Note [Strict State monad] for the particular notion of strictness
and implementation details.
The term oracle state. Stores VarInfo for encountered
Ids. These entries are possibly shared when we figure out that
two variables must be equal, thus represent the same set of values.
See Note [TmState invariants] in GHC.HsToCore.Pmc.Solver.
The type oracle state. An InertSet that we incrementally add
local type constraints to, together with a sequence number that counts
the number of times we extended it with new facts.