328 val prelude_import_unqualified_constr = [ |
328 val prelude_import_unqualified_constr = [ |
329 ("Bool", ["True", "False"]), |
329 ("Bool", ["True", "False"]), |
330 ("Maybe", ["Nothing", "Just"]) |
330 ("Maybe", ["Nothing", "Just"]) |
331 ]; |
331 ]; |
332 |
332 |
|
333 val data_bits_import_operators = [ |
|
334 ".&.", ".|.", ".^." |
|
335 ]; |
|
336 |
333 fun serialize_haskell module_prefix string_classes ctxt { module_name, |
337 fun serialize_haskell module_prefix string_classes ctxt { module_name, |
334 reserved_syms, identifiers, includes, class_syntax, tyco_syntax, const_syntax } program exports = |
338 reserved_syms, identifiers, includes, class_syntax, tyco_syntax, const_syntax } program exports = |
335 let |
339 let |
336 |
340 |
337 (* build program *) |
341 (* build program *) |
377 semicolon [str "import qualified", str module_name]; |
381 semicolon [str "import qualified", str module_name]; |
378 val import_common_ps = |
382 val import_common_ps = |
379 enclose "import Prelude (" ");" (commas (map str |
383 enclose "import Prelude (" ");" (commas (map str |
380 (map (Library.enclose "(" ")") prelude_import_operators @ prelude_import_unqualified) |
384 (map (Library.enclose "(" ")") prelude_import_operators @ prelude_import_unqualified) |
381 @ map (fn (tyco, constrs) => (enclose (tyco ^ "(") ")" o commas o map str) constrs) prelude_import_unqualified_constr)) |
385 @ map (fn (tyco, constrs) => (enclose (tyco ^ "(") ")" o commas o map str) constrs) prelude_import_unqualified_constr)) |
|
386 :: enclose "import Data.Bits (" ");" (commas |
|
387 (map (str o Library.enclose "(" ")") data_bits_import_operators)) |
382 :: print_qualified_import "Prelude" |
388 :: print_qualified_import "Prelude" |
|
389 :: print_qualified_import "Data.Bits" |
383 :: map (print_qualified_import o fst) includes; |
390 :: map (print_qualified_import o fst) includes; |
384 fun print_module module_name (gr, imports) = |
391 fun print_module module_name (gr, imports) = |
385 let |
392 let |
386 val deresolve = deresolver module_name; |
393 val deresolve = deresolver module_name; |
387 val deresolve_import = SOME o str o deresolve; |
394 val deresolve_import = SOME o str o deresolve; |