17 lines
No EOL
433 B
Haskell
17 lines
No EOL
433 B
Haskell
{-# LANGUAGE InstanceSigs #-}
|
|
module Terms where
|
|
|
|
-- Lambda-Terms
|
|
data Term
|
|
= Var String
|
|
| App Term Term
|
|
| Abs String Term
|
|
deriving (Eq, Ord)
|
|
instance Show Term where
|
|
show :: Term -> String
|
|
show (Var x) = x
|
|
show (App t1 t2) = show t1 ++ " " ++ go t2
|
|
where
|
|
go (App t3 t4) = "(" ++ show t3 ++ " " ++ go t4 ++ ")"
|
|
go t = show t
|
|
show (Abs x t) = "\\" ++ x ++ ". " ++ show t |