src/Tools/Haskell/haskell.ML
author wenzelm
Sat, 03 Nov 2018 20:09:39 +0100
changeset 69227 71b48b749836
parent 69225 bf2fecda8383
child 69233 560263485988
permissions -rw-r--r--
tuned message (e.g. see Options.save_prefs);
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
69225
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
     1
(*  Title:      Tools/Haskell/haskell.ml
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
     3
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
     4
Support for Isabelle tools in Haskell.
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
     5
*)
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
     6
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
     7
signature HASKELL =
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
     8
sig
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
     9
  val generate_file_cmd: (string * Position.T) * Input.source ->
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    10
    Toplevel.transition -> Toplevel.transition
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    11
  val export_file_cmd: string * Input.source ->
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    12
    Toplevel.transition -> Toplevel.transition
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    13
  val source_modules: Path.T list
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    14
end;
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    15
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    16
structure Haskell: HASKELL =
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    17
struct
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    18
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    19
(* commands *)
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    20
69227
71b48b749836 tuned message (e.g. see Options.save_prefs);
wenzelm
parents: 69225
diff changeset
    21
val header = "{- generated by Isabelle -}\n";
69225
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    22
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    23
fun generate_file_cmd (file, source) =
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    24
  Toplevel.keep (fn state =>
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    25
    let
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    26
      val ctxt = Toplevel.context_of state;
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    27
      val thy = Toplevel.theory_of state;
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    28
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    29
      val path = Resources.check_path ctxt (Resources.master_directory thy) file;
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    30
      val text = header ^ GHC.read_source ctxt source;
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    31
      val _ = Isabelle_System.mkdirs (Path.dir (Path.expand path));
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    32
      val _ = File.generate path text;
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    33
    in () end);
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    34
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    35
fun export_file_cmd (name, source) =
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    36
  Toplevel.keep (fn state =>
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    37
    let
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    38
      val ctxt = Toplevel.context_of state;
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    39
      val thy = Toplevel.theory_of state;
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    40
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    41
      val text = header ^ GHC.read_source ctxt source;
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    42
      val _ = Export.export thy name [text];
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    43
    in () end);
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    44
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    45
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    46
(* source modules *)
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    47
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    48
val source_modules =
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    49
 [\<^file>\<open>~~/src/Tools/Haskell/Library.hs\<close>,
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    50
  \<^file>\<open>~~/src/Tools/Haskell/Buffer.hs\<close>,
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    51
  \<^file>\<open>~~/src/Tools/Haskell/Properties.hs\<close>,
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    52
  \<^file>\<open>~~/src/Tools/Haskell/Markup.hs\<close>,
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    53
  \<^file>\<open>~~/src/Tools/Haskell/XML.hs\<close>,
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    54
  \<^file>\<open>~~/src/Tools/Haskell/YXML.hs\<close>];
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    55
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    56
end;