src/Tools/Code/code_haskell.ML
changeset 59323 468bd3aedfa1
parent 59104 a14475f044b2
child 59936 b8ffc3dc9e24
equal deleted inserted replaced
59322:8ccecf1415b0 59323:468bd3aedfa1
     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 print_numeral: string -> int -> string
    12   val setup: theory -> theory
       
    13 end;
    12 end;
    14 
    13 
    15 structure Code_Haskell : CODE_HASKELL =
    14 structure Code_Haskell : CODE_HASKELL =
    16 struct
    15 struct
    17 
    16 
   491   end;
   490   end;
   492 
   491 
   493 
   492 
   494 (** Isar setup **)
   493 (** Isar setup **)
   495 
   494 
   496 val _ =
   495 val _ = Theory.setup
   497   Outer_Syntax.command @{command_spec "code_monad"} "define code syntax for monads"
   496   (Code_Target.add_language
   498     (Parse.term -- Parse.name >> (fn (raw_bind, target) =>
       
   499       Toplevel.theory (add_monad target raw_bind)));
       
   500 
       
   501 val setup =
       
   502   Code_Target.add_language
       
   503     (target, { serializer = serializer, literals = literals,
   497     (target, { serializer = serializer, literals = literals,
   504       check = { env_var = "ISABELLE_GHC", make_destination = I,
   498       check = { env_var = "ISABELLE_GHC", make_destination = I,
   505         make_command = fn module_name =>
   499         make_command = fn module_name =>
   506           "\"$ISABELLE_GHC\" " ^ language_params  ^ " -odir build -hidir build -stubdir build -e \"\" " ^
   500           "\"$ISABELLE_GHC\" " ^ language_params  ^ " -odir build -hidir build -stubdir build -e \"\" " ^
   507             module_name ^ ".hs" } })
   501             module_name ^ ".hs" } })
   517       "import", "default", "forall", "let", "in", "class", "qualified", "data",
   511       "import", "default", "forall", "let", "in", "class", "qualified", "data",
   518       "newtype", "instance", "if", "then", "else", "type", "as", "do", "module"
   512       "newtype", "instance", "if", "then", "else", "type", "as", "do", "module"
   519     ]
   513     ]
   520   #> fold (Code_Target.add_reserved target) prelude_import_unqualified
   514   #> fold (Code_Target.add_reserved target) prelude_import_unqualified
   521   #> fold (Code_Target.add_reserved target o fst) prelude_import_unqualified_constr
   515   #> fold (Code_Target.add_reserved target o fst) prelude_import_unqualified_constr
   522   #> fold (fold (Code_Target.add_reserved target) o snd) prelude_import_unqualified_constr;
   516   #> fold (fold (Code_Target.add_reserved target) o snd) prelude_import_unqualified_constr);
       
   517 
       
   518 val _ =
       
   519   Outer_Syntax.command @{command_spec "code_monad"} "define code syntax for monads"
       
   520     (Parse.term -- Parse.name >> (fn (raw_bind, target) =>
       
   521       Toplevel.theory (add_monad target raw_bind)));
   523 
   522 
   524 end; (*struct*)
   523 end; (*struct*)