An interpreter for the untyped lambda calculus. Input is parsed into an expression in the calculus (variable, abstraction, or application), and normalized through
The interpreter parses input terms in a specific manner, to avoid ambiguity with associativity. Function applications must be surrounded by parentheses, for example
Function abstractions can be denoted either through the use of a double-backslash '\', or with the unicode lowercase lambda character 'λ'.
Parsing is achieved through the use of monadic parser combinators, which are combined through the functions provided by the Applicative, Alternative, and Monad Haskell type-classes.