422 Code_Target.parse_args (Scan.optional (Args.$$$ "root" -- Args.colon |-- Args.name) "" |
423 Code_Target.parse_args (Scan.optional (Args.$$$ "root" -- Args.colon |-- Args.name) "" |
423 -- Scan.optional (Args.$$$ "string_classes" >> K true) false |
424 -- Scan.optional (Args.$$$ "string_classes" >> K true) false |
424 >> (fn (module_prefix, string_classes) => |
425 >> (fn (module_prefix, string_classes) => |
425 serialize_haskell module_prefix string_classes)); |
426 serialize_haskell module_prefix string_classes)); |
426 |
427 |
|
428 fun print_numeral typ = Library.enclose "(" (" :: " ^ typ ^ ")") o signed_string_of_int; |
|
429 |
427 val literals = let |
430 val literals = let |
428 fun char_haskell c = |
431 fun char_haskell c = |
429 let |
432 let |
430 val s = ML_Syntax.print_char c; |
433 val s = ML_Syntax.print_char c; |
431 in if s = "'" then "\\'" else s end; |
434 in if s = "'" then "\\'" else s end; |
432 fun numeral_haskell k = if k >= 0 then string_of_int k |
|
433 else Library.enclose "(" ")" (signed_string_of_int k); |
|
434 in Literals { |
435 in Literals { |
435 literal_char = Library.enclose "'" "'" o char_haskell, |
436 literal_char = Library.enclose "'" "'" o char_haskell, |
436 literal_string = quote o translate_string char_haskell, |
437 literal_string = quote o translate_string char_haskell, |
437 literal_numeral = numeral_haskell, |
438 literal_numeral = print_numeral "Integer", |
438 literal_list = enum "," "[" "]", |
439 literal_list = enum "," "[" "]", |
439 infix_cons = (5, ":") |
440 infix_cons = (5, ":") |
440 } end; |
441 } end; |
441 |
442 |
442 |
443 |