Dtype [(["a"],"list", [("Cons",[Tvar "a"; Tapp [Tvar "a"] "list"]); ("Nil",[])])] Dletrec [("MEM","v3", Fun "v4" (Mat (Var "v4") [(Pcon "Nil" [],Val (Lit (Bool F))); (Pcon "Cons" [Pvar "v2"; Pvar "v1"], Log Or (App Equality (Var "v3") (Var "v2")) (App Opapp (App Opapp (Var "MEM") (Var "v3")) (Var "v1")))]))] Dtype [(["a"],"regexp", [("Repeat",[Tapp [Tvar "a"] "regexp"]); ("Then",[Tapp [Tvar "a"] "regexp"; Tapp [Tvar "a"] "regexp"]); ("Or",[Tapp [Tvar "a"] "regexp"; Tapp [Tvar "a"] "regexp"]); ("Charset",[Tapp [Tvar "a"] "list"]); ("Epsilon",[])])] Dtype [(["a"],"option",[("Some",[Tvar "a"]); ("None",[])])] Dletrec [("match","v13", Fun "v14" (Fun "v15" (Mat (Var "v13") [(Pcon "Nil" [], Mat (Var "v14") [(Pcon "Nil" [],Val (Lit (Bool T))); (Pcon "Cons" [Pvar "v2"; Pvar "v1"], Val (Lit (Bool F)))]); (Pcon "Cons" [Pvar "v12"; Pvar "v11"], Mat (Var "v12") [(Pcon "Epsilon" [], App Opapp (App Opapp (App Opapp (Var "match") (Var "v11")) (Var "v14")) (Var "v15")); (Pcon "Charset" [Pvar "v5"], Mat (Var "v14") [(Pcon "Nil" [],Val (Lit (Bool F))); (Pcon "Cons" [Pvar "v4"; Pvar "v3"], Log And (App Opapp (App Opapp (Var "MEM") (Var "v4")) (Var "v5")) (App Opapp (App Opapp (App Opapp (Var "match") (Var "v11")) (Var "v3")) (Con "None" [])))]); (Pcon "Or" [Pvar "v7"; Pvar "v6"], Log Or (App Opapp (App Opapp (App Opapp (Var "match") (Con "Cons" [Var "v7"; Var "v11"])) (Var "v14")) (Var "v15")) (App Opapp (App Opapp (App Opapp (Var "match") (Con "Cons" [Var "v6"; Var "v11"])) (Var "v14")) (Var "v15"))); (Pcon "Then" [Pvar "v9"; Pvar "v8"], App Opapp (App Opapp (App Opapp (Var "match") (Con "Cons" [Var "v9"; Con "Cons" [Var "v8"; Var "v11"]])) (Var "v14")) (Var "v15")); (Pcon "Repeat" [Pvar "v10"], If (App Equality (Var "v15") (Con "Some" [Con "Cons" [Con "Repeat" [Var "v10"]; Var "v11"]])) (Val (Lit (Bool F))) (Log Or (App Opapp (App Opapp (App Opapp (Var "match") (Var "v11")) (Var "v14")) (Var "v15")) (App Opapp (App Opapp (App Opapp (Var "match") (Con "Cons" [Var "v10"; Con "Cons" [Con "Repeat" [Var "v10"]; Var "v11"]])) (Var "v14")) (Con "Some" [Con "Cons" [Con "Repeat" [Var "v10"]; Var "v11"]]))))])])))]