module Parser where

data Expr = Variable String | Abstraction (String, Expr) | Application (Expr, Expr)
  deriving (Eq)

instance Show Expr where
  show (Variable name) = name
  show (Abstraction (arg, body)) = "λ" ++ arg ++ ". " ++ show body
  show (Application (f, x)) = show f ++ " " ++ show x

parse :: String -> Either String Expr
parse _ = Left "unimplemented"
