src/Tools/Code/code_haskell.ML
changeset 58400 d0d3c30806b4
parent 58397 1c036d6216d3
child 58454 271829a473ed
equal deleted inserted replaced
58399:c5430cf9aa87 58400:d0d3c30806b4
     6 
     6 
     7 signature CODE_HASKELL =
     7 signature CODE_HASKELL =
     8 sig
     8 sig
     9   val language_params: string
     9   val language_params: string
    10   val target: string
    10   val target: string
       
    11   val print_numeral: string -> int -> string
    11   val setup: theory -> theory
    12   val setup: theory -> theory
    12 end;
    13 end;
    13 
    14 
    14 structure Code_Haskell : CODE_HASKELL =
    15 structure Code_Haskell : CODE_HASKELL =
    15 struct
    16 struct
   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