testUntyped :: SpecWith ()
testUntyped = test s "Untyped" input output
  where
    s :: Syntactic '[TmApp, TmLam, TmVar]
    s = crep
    input = [
      "x",
      "y'",
      "\\x.x",
      "(\\x.x)   \\x.x",
      "\\x.(x)",
      "\\x.(x x)",
      "\\x.x \\x.x"]
    output = [
      "x",
      "y'",
      "\\x.x",
      "(\\x.x \\x.x)",
      "\\x.x",
      "\\x.(x x)",
      "(\\x.x \\x.x)"]
testUntyped :: SpecWith ()
testUntyped = test s "Untyped" input output
  where
    s :: Syntactic '[TmApp, TmLam, TmVar]
    s = crep
    input = [
      "x",
      "y'",
      "\\x.x",
      "(\\x.x)   \\x.x",
      "\\x.(x)",
      "\\x.(x x)",
      "\\x.x \\x.x"]
    output = [
      "x",
      "y'",
      "\\x.x",
      "(\\x.x \\x.x)",
      "\\x.x",
      "\\x.(x x)",
      "(\\x.x \\x.x)"]
testUntyped = test s "Untyped" input output
  where
    s :: Syntactic '[TmApp, TmLam, TmVar]
    s = crep
    input = [
      "x",
      "y'",
      "\\x.x",
      "(\\x.x)   \\x.x",
      "\\x.(x)",
      "\\x.(x x)",
      "\\x.x \\x.x"]
    output = [
      "x",
      "y'",
      "\\x.x",
      "(\\x.x \\x.x)",
      "\\x.x",
      "\\x.(x x)",
      "(\\x.x \\x.x)"]