HM parser
[fp.git] / src / Lambda / Term.hs
1 {-# LANGUAGE PatternSynonyms #-}
2
3 -- |
4 -- Module      :  Lambda.Term
5 -- Copyright   :  Tomáš Musil 2014
6 -- License     :  BSD-3
7 --
8 -- Maintainer  :  tomik.musil@gmail.com
9 -- Stability   :  experimental
10 --
11 -- Data types for λ terms.
12
13
14 module Lambda.Term
15   ( -- * Types
16     VarName
17   , Term(..)
18     -- * Pattern synonyms
19   , pattern RedEx
20   , pattern AppApp
21   , pattern EmLambda
22   ) where
23
24 type VarName = String
25
26 data Term = Var VarName | Lambda VarName Term | App Term Term deriving (Eq)
27
28 pattern RedEx x t s = App (Lambda x t) s
29 pattern AppApp a b c = App a (App b c)
30 pattern EmLambda x y t = Lambda x (Lambda y t)