equal
deleted
inserted
replaced
295 (** SML/OCaml serializer **) |
295 (** SML/OCaml serializer **) |
296 |
296 |
297 datatype ml_def = |
297 datatype ml_def = |
298 MLFuns of (string * (typscheme * (iterm list * iterm) list)) list |
298 MLFuns of (string * (typscheme * (iterm list * iterm) list)) list |
299 | MLDatas of (string * ((vname * sort) list * (string * itype list) list)) list |
299 | MLDatas of (string * ((vname * sort) list * (string * itype list) list)) list |
300 | MLClass of string * ((class * string) list * (vname * (string * itype) list)) |
300 | MLClass of string * (vname * ((class * string) list * (string * itype) list)) |
301 | MLClassinst of string * ((class * (string * (vname * sort) list)) |
301 | MLClassinst of string * ((class * (string * (vname * sort) list)) |
302 * ((class * (string * (string * dict list list))) list |
302 * ((class * (string * (string * dict list list))) list |
303 * (string * const) list)); |
303 * (string * const) list)); |
304 |
304 |
305 fun pr_sml allows_exception tyco_syntax const_syntax labelled_name init_syms deresolv is_cons ml_def = |
305 fun pr_sml allows_exception tyco_syntax const_syntax labelled_name init_syms deresolv is_cons ml_def = |
489 :: str "=" |
489 :: str "=" |
490 :: separate (str "|") (map pr_co cos) |
490 :: separate (str "|") (map pr_co cos) |
491 ); |
491 ); |
492 val (ps, p) = split_last (pr_data "datatype" data :: map (pr_data "and") datas'); |
492 val (ps, p) = split_last (pr_data "datatype" data :: map (pr_data "and") datas'); |
493 in Pretty.chunks (ps @ [Pretty.block ([p, str ";"])]) end |
493 in Pretty.chunks (ps @ [Pretty.block ([p, str ";"])]) end |
494 | pr_def (MLClass (class, (superclasses, (v, classops)))) = |
494 | pr_def (MLClass (class, (v, (superclasses, classops)))) = |
495 let |
495 let |
496 val w = first_upper v ^ "_"; |
496 val w = first_upper v ^ "_"; |
497 fun pr_superclass_field (class, classrel) = |
497 fun pr_superclass_field (class, classrel) = |
498 (concat o map str) [ |
498 (concat o map str) [ |
499 pr_label_classrel classrel, ":", "'" ^ v, deresolv class |
499 pr_label_classrel classrel, ":", "'" ^ v, deresolv class |
786 :: str "=" |
786 :: str "=" |
787 :: separate (str "|") (map pr_co cos) |
787 :: separate (str "|") (map pr_co cos) |
788 ); |
788 ); |
789 val (ps, p) = split_last (pr_data "type" data :: map (pr_data "and") datas'); |
789 val (ps, p) = split_last (pr_data "type" data :: map (pr_data "and") datas'); |
790 in Pretty.chunks (ps @ [Pretty.block ([p, str ";;"])]) end |
790 in Pretty.chunks (ps @ [Pretty.block ([p, str ";;"])]) end |
791 | pr_def (MLClass (class, (superclasses, (v, classops)))) = |
791 | pr_def (MLClass (class, (v, (superclasses, classops)))) = |
792 let |
792 let |
793 val w = "_" ^ first_upper v; |
793 val w = "_" ^ first_upper v; |
794 fun pr_superclass_field (class, classrel) = |
794 fun pr_superclass_field (class, classrel) = |
795 (concat o map str) [ |
795 (concat o map str) [ |
796 deresolv classrel, ":", "'" ^ v, deresolv class |
796 deresolv classrel, ":", "'" ^ v, deresolv class |
946 |> fold (fold (insert (op =)) o Graph.imm_succs code) names |
946 |> fold (fold (insert (op =)) o Graph.imm_succs code) names |
947 |> subtract (op =) names; |
947 |> subtract (op =) names; |
948 val (modls, _) = (split_list o map dest_name) names; |
948 val (modls, _) = (split_list o map dest_name) names; |
949 val modl' = (the_single o distinct (op =) o map name_modl) modls |
949 val modl' = (the_single o distinct (op =) o map name_modl) modls |
950 handle Empty => |
950 handle Empty => |
951 error ("Illegal mutual dependencies: " ^ commas (map labelled_name names)); |
951 error ("Different namespace prefixes for mutual dependencies:\n" |
|
952 ^ commas (map labelled_name names) |
|
953 ^ "\n" |
|
954 ^ commas (map (NameSpace.qualifier o NameSpace.qualifier) names)); |
952 val modl_explode = NameSpace.explode modl'; |
955 val modl_explode = NameSpace.explode modl'; |
953 fun add_dep name name'' = |
956 fun add_dep name name'' = |
954 let |
957 let |
955 val modl'' = (name_modl o fst o dest_name) name''; |
958 val modl'' = (name_modl o fst o dest_name) name''; |
956 in if modl' = modl'' then |
959 in if modl' = modl'' then |
1230 :: pr_co co |
1233 :: pr_co co |
1231 :: map ((fn p => Pretty.block [str "| ", p]) o pr_co) cos |
1234 :: map ((fn p => Pretty.block [str "| ", p]) o pr_co) cos |
1232 @ (if deriving_show name then [str "deriving (Read, Show)"] else []) |
1235 @ (if deriving_show name then [str "deriving (Read, Show)"] else []) |
1233 ) |
1236 ) |
1234 end |
1237 end |
1235 | pr_def (name, CodeThingol.Class (superclasss, (v, classops))) = |
1238 | pr_def (name, CodeThingol.Class (v, (superclasses, classops))) = |
1236 let |
1239 let |
1237 val tyvars = CodeName.intro_vars [v] init_syms; |
1240 val tyvars = CodeName.intro_vars [v] init_syms; |
1238 fun pr_classop (classop, ty) = |
1241 fun pr_classop (classop, ty) = |
1239 semicolon [ |
1242 semicolon [ |
1240 (str o classop_name name) classop, |
1243 (str o classop_name name) classop, |
1243 ] |
1246 ] |
1244 in |
1247 in |
1245 Pretty.block_enclose ( |
1248 Pretty.block_enclose ( |
1246 Pretty.block [ |
1249 Pretty.block [ |
1247 str "class ", |
1250 str "class ", |
1248 pr_typparms tyvars [(v, map fst superclasss)], |
1251 pr_typparms tyvars [(v, map fst superclasses)], |
1249 str (deresolv_here name ^ " " ^ CodeName.lookup_var tyvars v), |
1252 str (deresolv_here name ^ " " ^ CodeName.lookup_var tyvars v), |
1250 str " where {" |
1253 str " where {" |
1251 ], |
1254 ], |
1252 str "};" |
1255 str "};" |
1253 ) (map pr_classop classops) |
1256 ) (map pr_classop classops) |