module Main where

data Lam
  = ReplaceMe -- TODO
  deriving (Show, Read)

-- [beta s t] führt die β-Reduktion des Redex [(λ. s) t] durch
beta :: Lam -> Lam -> Lam
beta s t = error "beta-Reduktion nicht implementiert!" -- TODO

-- [isNormal t] prüft, ob [t] eine Normalform ist
isNormal :: Lam -> Bool
isNormal = error "Normalform-Check nicht implementiert!" -- TODO

-- [evalNormal s] reduziert [s] mittels normaler Reduktion
evalNormal :: Lam -> Lam
evalNormal = error "Normale Reduktion nicht implementiert!" -- TODO

-- [evalApplicative s] reduziert [s] mittels applikativer Reduktion
evalApplicative :: Lam -> Lam
evalApplicative = error "Applikative Reduktion nicht implementiert!" -- TODO

main :: IO ()
main = interact (\s -> let n = evalNormal (read s)
                           a = evalApplicative (read s)
                       in n `seq` a `seq`
                             "normal:      " ++ show n
                          ++ "\napplicative: " ++ show a ++ "\n")