testTyArith :: SpecWith ()
testTyArith = test s "TyArith" input output
  where
    s :: Syntactic '[TmBool, TmNat, TmArith, TyNat, TyBool]
    s = crep
    input = [
      "true",
      "if false then true else false",
      "0",
      "succ (pred 0)",
      "iszero (pred (succ (succ 0)))",
      "Nat",
      "Bool"]
    output = [
      "true",
      "(if false then true else false)",
      "0",
      "succ (pred (0))",
      "iszero (pred (succ (succ (0))))",
      "Nat",
      "Bool"]
testTyArith :: SpecWith ()
testTyArith = test s "TyArith" input output
  where
    s :: Syntactic '[TmBool, TmNat, TmArith, TyNat, TyBool]
    s = crep
    input = [
      "true",
      "if false then true else false",
      "0",
      "succ (pred 0)",
      "iszero (pred (succ (succ 0)))",
      "Nat",
      "Bool"]
    output = [
      "true",
      "(if false then true else false)",
      "0",
      "succ (pred (0))",
      "iszero (pred (succ (succ (0))))",
      "Nat",
      "Bool"]
testTyArith = test s "TyArith" input output
  where
    s :: Syntactic '[TmBool, TmNat, TmArith, TyNat, TyBool]
    s = crep
    input = [
      "true",
      "if false then true else false",
      "0",
      "succ (pred 0)",
      "iszero (pred (succ (succ 0)))",
      "Nat",
      "Bool"]
    output = [
      "true",
      "(if false then true else false)",
      "0",
      "succ (pred (0))",
      "iszero (pred (succ (succ (0))))",
      "Nat",
      "Bool"]