src/Pure/term_xml.ML
author wenzelm
Tue, 12 Jul 2011 10:44:30 +0200
changeset 43767 e0219ef7f84c
parent 43731 70072780e095
child 43778 ce9189450447
permissions -rw-r--r--
tuned XML modules;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
43729
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
     1
(*  Title:      Pure/term_xml.ML
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
     3
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
     4
XML data representation of lambda terms.
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
     5
*)
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
     6
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
     7
signature TERM_XML_OPS =
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
     8
sig
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
     9
  type 'a T
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    10
  val indexname: indexname T
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    11
  val sort: sort T
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    12
  val typ: typ T
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    13
  val term: term T
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    14
end
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    15
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    16
signature TERM_XML =
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    17
sig
43767
e0219ef7f84c tuned XML modules;
wenzelm
parents: 43731
diff changeset
    18
  structure Encode: TERM_XML_OPS where type 'a T = 'a XML.Encode.T
e0219ef7f84c tuned XML modules;
wenzelm
parents: 43731
diff changeset
    19
  structure Decode: TERM_XML_OPS where type 'a T = 'a XML.Decode.T
43729
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    20
end;
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    21
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    22
structure Term_XML: TERM_XML =
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    23
struct
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    24
43731
70072780e095 inner syntax supports inlined YXML according to Term_XML (particularly useful for producing text under program control);
wenzelm
parents: 43730
diff changeset
    25
(* encode *)
43729
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    26
43731
70072780e095 inner syntax supports inlined YXML according to Term_XML (particularly useful for producing text under program control);
wenzelm
parents: 43730
diff changeset
    27
structure Encode =
43729
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    28
struct
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    29
43767
e0219ef7f84c tuned XML modules;
wenzelm
parents: 43731
diff changeset
    30
open XML.Encode;
43729
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    31
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    32
val indexname = pair string int;
43730
a0ed7bc688b5 lambda terms with XML data representation in Scala;
wenzelm
parents: 43729
diff changeset
    33
a0ed7bc688b5 lambda terms with XML data representation in Scala;
wenzelm
parents: 43729
diff changeset
    34
val sort = list string;
43729
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    35
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    36
fun typ T = T |> variant
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    37
 [fn Type x => pair string (list typ) x,
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    38
  fn TFree x => pair string sort x,
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    39
  fn TVar x => pair indexname sort x];
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    40
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    41
fun term t = t |> variant
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    42
 [fn Const x => pair string typ x,
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    43
  fn Free x => pair string typ x,
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    44
  fn Var x => pair indexname typ x,
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    45
  fn Bound x => int x,
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    46
  fn Abs x => triple string typ term x,
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    47
  fn op $ x => pair term term x];
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    48
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    49
end;
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    50
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    51
43731
70072780e095 inner syntax supports inlined YXML according to Term_XML (particularly useful for producing text under program control);
wenzelm
parents: 43730
diff changeset
    52
(* decode *)
43729
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    53
43731
70072780e095 inner syntax supports inlined YXML according to Term_XML (particularly useful for producing text under program control);
wenzelm
parents: 43730
diff changeset
    54
structure Decode =
43729
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    55
struct
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    56
43767
e0219ef7f84c tuned XML modules;
wenzelm
parents: 43731
diff changeset
    57
open XML.Decode;
43729
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    58
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    59
val indexname = pair string int;
43730
a0ed7bc688b5 lambda terms with XML data representation in Scala;
wenzelm
parents: 43729
diff changeset
    60
a0ed7bc688b5 lambda terms with XML data representation in Scala;
wenzelm
parents: 43729
diff changeset
    61
val sort = list string;
43729
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    62
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    63
fun typ T = T |> variant
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    64
 [Type o pair string (list typ),
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    65
  TFree o pair string sort,
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    66
  TVar o pair indexname sort];
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    67
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    68
fun term t = t |> variant
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    69
 [Const o pair string typ,
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    70
  Free o pair string typ,
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    71
  Var o pair indexname typ,
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    72
  Bound o int,
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    73
  Abs o triple string typ term,
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    74
  op $ o pair term term];
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    75
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    76
end;
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    77
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    78
end;