equal
deleted
inserted
replaced
22 |
22 |
23 |
23 |
24 (** Haskell serializer **) |
24 (** Haskell serializer **) |
25 |
25 |
26 fun pr_haskell_stmt labelled_name syntax_class syntax_tyco syntax_const |
26 fun pr_haskell_stmt labelled_name syntax_class syntax_tyco syntax_const |
27 init_syms deresolve is_cons contr_classparam_typs deriving_show = |
27 init_syms deresolve contr_classparam_typs deriving_show = |
28 let |
28 let |
29 val deresolve_base = Long_Name.base_name o deresolve; |
29 val deresolve_base = Long_Name.base_name o deresolve; |
30 fun class_name class = case syntax_class class |
30 fun class_name class = case syntax_class class |
31 of NONE => deresolve class |
31 of NONE => deresolve class |
32 | SOME class => class; |
32 | SOME class => class; |
330 val stmt_names = Code_Target.stmt_names_of_destination destination; |
330 val stmt_names = Code_Target.stmt_names_of_destination destination; |
331 val module_name = if null stmt_names then raw_module_name else SOME "Code"; |
331 val module_name = if null stmt_names then raw_module_name else SOME "Code"; |
332 val reserved_names = fold (insert (op =) o fst) includes raw_reserved_names; |
332 val reserved_names = fold (insert (op =) o fst) includes raw_reserved_names; |
333 val (deresolver, hs_program) = haskell_program_of_program labelled_name |
333 val (deresolver, hs_program) = haskell_program_of_program labelled_name |
334 module_name module_prefix reserved_names raw_module_alias program; |
334 module_name module_prefix reserved_names raw_module_alias program; |
335 val is_cons = Code_Thingol.is_cons program; |
|
336 val contr_classparam_typs = Code_Thingol.contr_classparam_typs program; |
335 val contr_classparam_typs = Code_Thingol.contr_classparam_typs program; |
337 fun deriving_show tyco = |
336 fun deriving_show tyco = |
338 let |
337 let |
339 fun deriv _ "fun" = false |
338 fun deriv _ "fun" = false |
340 | deriv tycos tyco = member (op =) tycos tyco orelse |
339 | deriv tycos tyco = member (op =) tycos tyco orelse |
348 in deriv [] tyco end; |
347 in deriv [] tyco end; |
349 val reserved_names = Code_Printer.make_vars reserved_names; |
348 val reserved_names = Code_Printer.make_vars reserved_names; |
350 fun pr_stmt qualified = pr_haskell_stmt labelled_name |
349 fun pr_stmt qualified = pr_haskell_stmt labelled_name |
351 syntax_class syntax_tyco syntax_const reserved_names |
350 syntax_class syntax_tyco syntax_const reserved_names |
352 (if qualified then deresolver else Long_Name.base_name o deresolver) |
351 (if qualified then deresolver else Long_Name.base_name o deresolver) |
353 is_cons contr_classparam_typs |
352 contr_classparam_typs |
354 (if string_classes then deriving_show else K false); |
353 (if string_classes then deriving_show else K false); |
355 fun pr_module name content = |
354 fun pr_module name content = |
356 (name, Pretty.chunks [ |
355 (name, Pretty.chunks [ |
357 str ("module " ^ name ^ " where {"), |
356 str ("module " ^ name ^ " where {"), |
358 str "", |
357 str "", |