(* This code extends 'mini_prelude'. *) Dtype [(["a"],"heap", [("Tree", [Tvar "a"; Tapp [Tvar "a"] "heap"; Tapp [Tvar "a"] "heap"]); ("Empty",[])])] Dlet (Pvar "empty") (Con "Empty" []) Dlet (Pvar "is_empty") (Fun "v4" (Mat (Var "v4") [(Pcon "Empty" [],Val (Lit (Bool T))); (Pcon "Tree" [Pvar "v3"; Pvar "v2"; Pvar "v1"], Val (Lit (Bool F)))])) Dletrec [("merge","v18", Fun "v19" (Fun "v16" (Fun "v17" (Mat (Var "v16") [(Pcon "Empty" [], Mat (Var "v17") [(Pcon "Empty" [],Con "Empty" []); (Pcon "Tree" [Pvar "v3"; Pvar "v2"; Pvar "v1"], Con "Tree" [Var "v3"; Var "v2"; Var "v1"])]); (Pcon "Tree" [Pvar "v15"; Pvar "v14"; Pvar "v13"], Mat (Var "v17") [(Pcon "Empty" [], Con "Tree" [Var "v15"; Var "v14"; Var "v13"]); (Pcon "Tree" [Pvar "v12"; Pvar "v11"; Pvar "v10"], If (App Opapp (App Opapp (Var "v19") (App Opapp (Var "v18") (Var "v15"))) (App Opapp (Var "v18") (Var "v12"))) (Mat (Var "v14") [(Pcon "Empty" [], Con "Tree" [Var "v15"; Con "Tree" [Var "v12"; Var "v11"; Var "v10"]; Var "v13"]); (Pcon "Tree" [Pvar "v6"; Pvar "v5"; Pvar "v4"], Con "Tree" [Var "v15"; Con "Empty" []; App Opapp (App Opapp (App Opapp (App Opapp (Var "merge") (Var "v18")) (Var "v19")) (App Opapp (App Opapp (App Opapp (App Opapp (Var "merge") (Var "v18")) (Var "v19")) (Con "Tree" [Var "v12"; Var "v11"; Var "v10"])) (Var "v14"))) (Var "v13")])]) (Mat (Var "v11") [(Pcon "Empty" [], Con "Tree" [Var "v12"; Con "Tree" [Var "v15"; Var "v14"; Var "v13"]; Var "v10"]); (Pcon "Tree" [Pvar "v9"; Pvar "v8"; Pvar "v7"], Con "Tree" [Var "v12"; Con "Empty" []; App Opapp (App Opapp (App Opapp (App Opapp (Var "merge") (Var "v18")) (Var "v19")) (App Opapp (App Opapp (App Opapp (App Opapp (Var "merge") (Var "v18")) (Var "v19")) (Con "Tree" [Var "v15"; Var "v14"; Var "v13"])) (Var "v11"))) (Var "v10")])]))])]))))] Dlet (Pvar "insert") (Fun "v2" (Fun "v3" (Fun "v4" (Fun "v1" (App Opapp (App Opapp (App Opapp (App Opapp (Var "merge") (Var "v2")) (Var "v3")) (Con "Tree" [Var "v4"; Con "Empty" []; Con "Empty" []])) (Var "v1")))))) Dlet (Pvar "find_min") (Fun "x1" (Mat (Var "x1") [(Pcon "Empty" [],Raise Bind_error); (Pcon "Tree" [Pvar "v3"; Pvar "v2"; Pvar "v1"],Var "v3")])) Dlet (Pvar "delete_min") (Fun "x1" (Fun "x2" (Fun "x3" (Mat (Var "x3") [(Pcon "Empty" [],Raise Bind_error); (Pcon "Tree" [Pvar "v3"; Pvar "v2"; Pvar "v1"], App Opapp (App Opapp (App Opapp (App Opapp (Var "merge") (Var "x1")) (Var "x2")) (Var "v2")) (Var "v1"))]))))