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