--- | Read and show λ-terms
---
--- >>> print $ Lambda "x" (Var "x")
--- (λx.x)
---
--- prop> t == tRead (show (t :: Term))
+type VarName = String
+
+-- |
+-- >>> print $ Lambda "x" (Var "x")
+-- (λx.x)
+
+data Term = Var VarName | Lambda VarName Term | App Term Term deriving (Eq)
+
+-- pattern RedEx x t s = App (Lambda x t) s
+pattern AppApp a b c = App a (App b c)
+pattern EmLambda x y t = Lambda x (Lambda y t)
+