(* This code extends 'mini_prelude'. *) Dtype [(["a"],"heap", [("Tree", [Tnum; Tvar "a"; Tapp [Tvar "a"] "heap"; Tapp [Tvar "a"] "heap"]); ("Empty",[])])] Dlet (Pvar "rank") (Fun "v5" (Mat (Var "v5") [(Pcon "Empty" [],Val (Lit (IntLit 0))); (Pcon "Tree" [Pvar "v4"; Pvar "v3"; Pvar "v2"; Pvar "v1"], Var "v4")])) Dlet (Pvar "make_node") (Fun "v3" (Fun "v1" (Fun "v2" (If (App (Opb Geq) (App Opapp (Var "rank") (Var "v1")) (App Opapp (Var "rank") (Var "v2"))) (Con "Tree" [App (Opn Plus) (App Opapp (Var "rank") (Var "v2")) (Val (Lit (IntLit 1))); Var "v3"; Var "v1"; Var "v2"]) (Con "Tree" [App (Opn Plus) (App Opapp (Var "rank") (Var "v1")) (Val (Lit (IntLit 1))); Var "v3"; Var "v2"; Var "v1"]))))) Dlet (Pvar "empty") (Con "Empty" []) Dlet (Pvar "is_empty") (Fun "v5" (Mat (Var "v5") [(Pcon "Empty" [],Val (Lit (Bool T))); (Pcon "Tree" [Pvar "v4"; Pvar "v3"; Pvar "v2"; Pvar "v1"], Val (Lit (Bool F)))])) Dletrec [("merge","v13", Fun "v14" (Fun "v15" (Fun "v16" (Mat (Var "v15") [(Pcon "Empty" [], Mat (Var "v16") [(Pcon "Empty" [],Con "Empty" []); (Pcon "Tree" [Pvar "v4"; Pvar "v3"; Pvar "v2"; Pvar "v1"], Con "Tree" [Var "v4"; Var "v3"; Var "v2"; Var "v1"])]); (Pcon "Tree" [Pvar "v12"; Pvar "v11"; Pvar "v10"; Pvar "v9"], Mat (Var "v16") [(Pcon "Empty" [], Con "Tree" [Var "v12"; Var "v11"; Var "v10"; Var "v9"]); (Pcon "Tree" [Pvar "v8"; Pvar "v7"; Pvar "v6"; Pvar "v5"], If (App Opapp (App Opapp (Var "v14") (App Opapp (Var "v13") (Var "v11"))) (App Opapp (Var "v13") (Var "v7"))) (App Opapp (App Opapp (App Opapp (Var "make_node") (Var "v11")) (Var "v10")) (App Opapp (App Opapp (App Opapp (App Opapp (Var "merge") (Var "v13")) (Var "v14")) (Var "v9")) (Con "Tree" [Var "v8"; Var "v7"; Var "v6"; Var "v5"]))) (App Opapp (App Opapp (App Opapp (Var "make_node") (Var "v7")) (Var "v6")) (App Opapp (App Opapp (App Opapp (App Opapp (Var "merge") (Var "v13")) (Var "v14")) (Con "Tree" [Var "v12"; Var "v11"; Var "v10"; Var "v9"])) (Var "v5"))))])]))))] 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" [Val (Lit (IntLit 1)); Var "v4"; Con "Empty" []; Con "Empty" []])) (Var "v2")))))) Dlet (Pvar "find_min") (Fun "x1" (Mat (Var "x1") [(Pcon "Empty" [],Raise Bind_error); (Pcon "Tree" [Pvar "v4"; 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 "v4"; Pvar "v3"; Pvar "v2"; Pvar "v1"], App Opapp (App Opapp (App Opapp (App Opapp (Var "merge") (Var "x1")) (Var "x2")) (Var "v2")) (Var "v1"))]))))