Copyright | (c) 2014 Edwin Westbrook, Nicolas Frisby, and Paul Brauner |
---|---|
License | BSD3 |
Maintainer | emw4@rice.edu |
Stability | experimental |
Portability | GHC |
Safe Haskell | None |
Language | Haskell98 |
This module uses Template Haskell to distinguish closed terms, so that the
library can trust such functions to not contain any Name
values in their
closure.
Abstract types
The type Cl a
represents a closed term of type a
,
i.e., an expression of type a
with no free (Haskell) variables.
Since this cannot be checked directly in the Haskell type system,
the Cl
data type is hidden, and the user can only create
closed terms using Template Haskell, through the cl
operator.
Operators involving Cl
noClosedNames :: Cl (Name a) -> b Source
noClosedNames
encodes the hobbits guarantee that no name can escape its
multi-binding.