-- Parser for fully paranthesized lambda terms import Parser data Expr = Id String | App Expr Expr | Lam String Expr deriving Show expr :: Parser Expr expr = id >>> Id ||| (ch '(' *** expr *** expr *** ch ')') >>> (\(_,(e1,(e2,_))) -> App e1 e2) ||| (ch '(' *** ch '\\' *** id *** ch '.' *** expr *** ch ')') >>> (\(_,(_,(x,(_,(e,_))))) -> Lam x e) where ch c = sp (char c) id = sp ident