equal
deleted
inserted
replaced
282 ]; |
282 ]; |
283 fun pretty_compact fxy pr [e1, e2] = |
283 fun pretty_compact fxy pr [e1, e2] = |
284 case unfoldr dest_cons e2 |
284 case unfoldr dest_cons e2 |
285 of (es, IConst (c, _)) => (writeln (string_of_int (length es)); |
285 of (es, IConst (c, _)) => (writeln (string_of_int (length es)); |
286 if c = thingol_nil |
286 if c = thingol_nil |
287 then Pretty.gen_list "," "[" "]" (map (pr NOBR) (e1::es)) |
287 then Pretty.enum "," "[" "]" (map (pr NOBR) (e1::es)) |
288 else pretty_default fxy pr e1 e2) |
288 else pretty_default fxy pr e1 e2) |
289 | _ => pretty_default fxy pr e1 e2; |
289 | _ => pretty_default fxy pr e1 e2; |
290 in ((2, 2), pretty_compact) end; |
290 in ((2, 2), pretty_compact) end; |
291 |
291 |
292 |
292 |
343 | ml_from_type _ (IVarT (v, [])) = |
343 | ml_from_type _ (IVarT (v, [])) = |
344 str ("'" ^ v) |
344 str ("'" ^ v) |
345 | ml_from_type _ (IVarT (_, sort)) = |
345 | ml_from_type _ (IVarT (_, sort)) = |
346 "cannot serialize sort constrained type variable to ML: " ^ commas sort |> error |
346 "cannot serialize sort constrained type variable to ML: " ^ commas sort |> error |
347 | ml_from_type _ (IDictT fs) = |
347 | ml_from_type _ (IDictT fs) = |
348 Pretty.gen_list "," "{" "}" ( |
348 Pretty.enum "," "{" "}" ( |
349 map (fn (f, ty) => |
349 map (fn (f, ty) => |
350 Pretty.block [str (ml_from_label f ^ ": "), ml_from_type NOBR ty]) fs |
350 Pretty.block [str (ml_from_label f ^ ": "), ml_from_type NOBR ty]) fs |
351 ); |
351 ); |
352 fun ml_from_pat fxy (ICons ((f, ps), ty)) = |
352 fun ml_from_pat fxy (ICons ((f, ps), ty)) = |
353 (case const_syntax f |
353 (case const_syntax f |
358 |> cons ((str o resolv) f) |
358 |> cons ((str o resolv) f) |
359 |> brackify fxy |
359 |> brackify fxy |
360 else |
360 else |
361 ps |
361 ps |
362 |> map (ml_from_pat BR) |
362 |> map (ml_from_pat BR) |
363 |> Pretty.gen_list "," "(" ")" |
363 |> Pretty.enum "," "(" ")" |
364 |> single |
364 |> single |
365 |> cons ((str o resolv) f) |
365 |> cons ((str o resolv) f) |
366 |> brackify fxy |
366 |> brackify fxy |
367 | SOME ((i, k), pr) => |
367 | SOME ((i, k), pr) => |
368 if not (i <= length ps andalso length ps <= k) |
368 if not (i <= length ps andalso length ps <= k) |
431 :: map (mk_clause "| ") cs |
431 :: map (mk_clause "| ") cs |
432 ) end |
432 ) end |
433 | ml_from_expr fxy (IInst _) = |
433 | ml_from_expr fxy (IInst _) = |
434 error "cannot serialize poly instant to ML" |
434 error "cannot serialize poly instant to ML" |
435 | ml_from_expr fxy (IDictE fs) = |
435 | ml_from_expr fxy (IDictE fs) = |
436 Pretty.gen_list "," "{" "}" ( |
436 Pretty.enum "," "{" "}" ( |
437 map (fn (f, e) => |
437 map (fn (f, e) => |
438 Pretty.block [str (ml_from_label f ^ " = "), ml_from_expr NOBR e]) fs |
438 Pretty.block [str (ml_from_label f ^ " = "), ml_from_expr NOBR e]) fs |
439 ) |
439 ) |
440 | ml_from_expr fxy (ILookup ([], v)) = |
440 | ml_from_expr fxy (ILookup ([], v)) = |
441 str v |
441 str v |
454 | ml_from_expr _ e = |
454 | ml_from_expr _ e = |
455 error ("dubious expression: " ^ (Pretty.output o pretty_iexpr) e) |
455 error ("dubious expression: " ^ (Pretty.output o pretty_iexpr) e) |
456 and ml_mk_app f es = |
456 and ml_mk_app f es = |
457 if is_cons f andalso length es > 1 |
457 if is_cons f andalso length es > 1 |
458 then |
458 then |
459 [(str o resolv) f, Pretty.gen_list " *" "(" ")" (map (ml_from_expr BR) es)] |
459 [(str o resolv) f, Pretty.enum " *" "(" ")" (map (ml_from_expr BR) es)] |
460 else |
460 else |
461 (str o resolv) f :: map (ml_from_expr BR) es |
461 (str o resolv) f :: map (ml_from_expr BR) es |
462 and ml_from_app fxy = |
462 and ml_from_app fxy = |
463 from_app ml_mk_app ml_from_expr const_syntax fxy; |
463 from_app ml_mk_app ml_from_expr const_syntax fxy; |
464 fun ml_from_funs (ds as d::ds_tl) = |
464 fun ml_from_funs (ds as d::ds_tl) = |
646 let |
646 let |
647 fun from_sctxt [] = str "" |
647 fun from_sctxt [] = str "" |
648 | from_sctxt vs = |
648 | from_sctxt vs = |
649 vs |
649 vs |
650 |> map (fn (v, cls) => str ((upper_first o resolv) cls ^ " " ^ lower_first v)) |
650 |> map (fn (v, cls) => str ((upper_first o resolv) cls ^ " " ^ lower_first v)) |
651 |> Pretty.gen_list "," "(" ")" |
651 |> Pretty.enum "," "(" ")" |
652 |> (fn p => Pretty.block [p, str " => "]) |
652 |> (fn p => Pretty.block [p, str " => "]) |
653 in |
653 in |
654 vs |
654 vs |
655 |> map (fn (v, sort) => map (pair v) sort) |
655 |> map (fn (v, sort) => map (pair v) sort) |
656 |> Library.flat |
656 |> Library.flat |