module Minilang.Lambda.DeBruijnSpec where import Minilang.Lambda.DeBruijn (DeBruijn (..), eval, toDeBruijn) import qualified Minilang.Lambda.Eval as Eval import Test.Hspec (Spec, it, shouldBe) spec :: Spec spec = do it "convert term to deBruijn representation" $ do let term = Eval.Lam "x" (Eval.Lam "y" (Eval.Var "x")) deBruijn = toDeBruijn term deBruijn `shouldBe` Lam (Lam (Var 1)) it "evaluates deBruijn term" $ do let term = App (App (Lam (Lam (Var 1))) (Var 12)) (Var 34) eval term `shouldBe` Var 12