src/Pure/term_xml.ML
author wenzelm
Sun, 10 Jul 2011 17:58:11 +0200
changeset 43730 a0ed7bc688b5
parent 43729 07d3c6afa865
child 43731 70072780e095
permissions -rw-r--r--
lambda terms with XML data representation in Scala; avoid `class` in signature;
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
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    18
  structure Make: TERM_XML_OPS where type 'a T = 'a XML_Data.Make.T
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    19
  structure Dest: TERM_XML_OPS where type 'a T = 'a XML_Data.Dest.T
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
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    25
(* make *)
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    26
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    27
structure Make =
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
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    30
open XML_Data.Make;
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
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    52
(* dest *)
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    53
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    54
structure Dest =
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
07d3c6afa865 XML data representation of lambda terms;
wenzelm
parents:
diff changeset
    57
open XML_Data.Dest;
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;