src/Tools/Haskell/haskell.ML
author wenzelm
Mon, 05 Nov 2018 15:04:31 +0100
changeset 69239 6cd985a78d6e
parent 69233 560263485988
child 69240 16ca270090b6
permissions -rw-r--r--
support sub-directories, i.e. structure module names;
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
69239
6cd985a78d6e support sub-directories, i.e. structure module names;
wenzelm
parents: 69233
diff changeset
    13
  val sources: Path.T list
6cd985a78d6e support sub-directories, i.e. structure module names;
wenzelm
parents: 69233
diff changeset
    14
  val install_sources: Path.T -> unit
69225
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    15
end;
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    16
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    17
structure Haskell: HASKELL =
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    18
struct
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    19
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    20
(* commands *)
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    21
69227
71b48b749836 tuned message (e.g. see Options.save_prefs);
wenzelm
parents: 69225
diff changeset
    22
val header = "{- generated by Isabelle -}\n";
69225
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    23
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    24
fun generate_file_cmd (file, source) =
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    25
  Toplevel.keep (fn state =>
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    26
    let
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    27
      val ctxt = Toplevel.context_of state;
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    28
      val thy = Toplevel.theory_of state;
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    29
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    30
      val path = Resources.check_path ctxt (Resources.master_directory thy) file;
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    31
      val text = header ^ GHC.read_source ctxt source;
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    32
      val _ = Isabelle_System.mkdirs (Path.dir (Path.expand path));
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    33
      val _ = File.generate path text;
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    34
    in () end);
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    35
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    36
fun export_file_cmd (name, source) =
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    37
  Toplevel.keep (fn state =>
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    38
    let
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    39
      val ctxt = Toplevel.context_of state;
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    40
      val thy = Toplevel.theory_of state;
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    41
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    42
      val text = header ^ GHC.read_source ctxt source;
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    43
      val _ = Export.export thy name [text];
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    44
    in () end);
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    45
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    46
69239
6cd985a78d6e support sub-directories, i.e. structure module names;
wenzelm
parents: 69233
diff changeset
    47
(* sources *)
69225
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    48
69239
6cd985a78d6e support sub-directories, i.e. structure module names;
wenzelm
parents: 69233
diff changeset
    49
val sources =
6cd985a78d6e support sub-directories, i.e. structure module names;
wenzelm
parents: 69233
diff changeset
    50
 [\<^path>\<open>Library.hs\<close>,
6cd985a78d6e support sub-directories, i.e. structure module names;
wenzelm
parents: 69233
diff changeset
    51
  \<^path>\<open>Value.hs\<close>,
6cd985a78d6e support sub-directories, i.e. structure module names;
wenzelm
parents: 69233
diff changeset
    52
  \<^path>\<open>Buffer.hs\<close>,
6cd985a78d6e support sub-directories, i.e. structure module names;
wenzelm
parents: 69233
diff changeset
    53
  \<^path>\<open>Properties.hs\<close>,
6cd985a78d6e support sub-directories, i.e. structure module names;
wenzelm
parents: 69233
diff changeset
    54
  \<^path>\<open>Markup.hs\<close>,
6cd985a78d6e support sub-directories, i.e. structure module names;
wenzelm
parents: 69233
diff changeset
    55
  \<^path>\<open>XML.hs\<close>,
6cd985a78d6e support sub-directories, i.e. structure module names;
wenzelm
parents: 69233
diff changeset
    56
  \<^path>\<open>YXML.hs\<close>];
6cd985a78d6e support sub-directories, i.e. structure module names;
wenzelm
parents: 69233
diff changeset
    57
6cd985a78d6e support sub-directories, i.e. structure module names;
wenzelm
parents: 69233
diff changeset
    58
val master_dir = Resources.master_directory \<^theory>;
6cd985a78d6e support sub-directories, i.e. structure module names;
wenzelm
parents: 69233
diff changeset
    59
6cd985a78d6e support sub-directories, i.e. structure module names;
wenzelm
parents: 69233
diff changeset
    60
fun install_sources dir =
6cd985a78d6e support sub-directories, i.e. structure module names;
wenzelm
parents: 69233
diff changeset
    61
  sources |> List.app (fn path => Isabelle_System.copy_file_base (master_dir, path) dir);
69225
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    62
bf2fecda8383 support for Isabelle tools in Haskell;
wenzelm
parents:
diff changeset
    63
end;