src/Pure/theory_data.ML
author kleing
Sun, 06 Apr 2003 21:16:50 +0200
changeset 13901 af38553e61ee
parent 12785 27debaf2112d
child 14981 e73f8140af78
permissions -rw-r--r--
use 2 processors on sunbroy1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5003
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
     1
(*  Title:      Pure/theory_data.ML
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
     2
    ID:         $Id$
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
     3
    Author:     Markus Wenzel, TU Muenchen
12785
wenzelm
parents: 12311
diff changeset
     4
    License:    GPL (GNU GENERAL PUBLIC LICENSE)
5003
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
     5
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
     6
Type-safe interface for theory data.
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
     7
*)
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
     8
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
     9
signature THEORY_DATA_ARGS =
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    10
sig
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    11
  val name: string
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    12
  type T
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    13
  val empty: T
6546
995a66249a9b theory data: copy;
wenzelm
parents: 5642
diff changeset
    14
  val copy: T -> T
5003
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    15
  val prep_ext: T -> T
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    16
  val merge: T * T -> T
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    17
  val print: Sign.sg -> T -> unit
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    18
end;
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    19
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    20
signature THEORY_DATA =
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    21
sig
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    22
  type T
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    23
  val init: theory -> theory
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    24
  val print: theory -> unit
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    25
  val get_sg: Sign.sg -> T
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    26
  val get: theory -> T
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    27
  val put: T -> theory -> theory
8142
37d3b5a4ebae added map;
wenzelm
parents: 7348
diff changeset
    28
  val map: (T -> T) -> theory -> theory
5003
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    29
end;
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    30
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    31
functor TheoryDataFun(Args: THEORY_DATA_ARGS): THEORY_DATA =
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    32
struct
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    33
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    34
(*object kind kept private!*)
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    35
val kind = Object.kind Args.name;
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    36
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    37
type T = Args.T;
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    38
exception Data of T;
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    39
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    40
val init =
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    41
  Theory.init_data kind
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    42
    (Data Args.empty,
6546
995a66249a9b theory data: copy;
wenzelm
parents: 5642
diff changeset
    43
      fn (Data x) => Data (Args.copy x),
5003
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    44
      fn (Data x) => Data (Args.prep_ext x),
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    45
      fn (Data x1, Data x2) => Data (Args.merge (x1, x2)),
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    46
      fn sg => fn (Data x) => Args.print sg x);
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    47
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    48
val print = Theory.print_data kind;
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    49
val get_sg = Sign.get_data kind (fn Data x => x);
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    50
val get = get_sg o Theory.sign_of;
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    51
val put = Theory.put_data kind Data;
8142
37d3b5a4ebae added map;
wenzelm
parents: 7348
diff changeset
    52
fun map f thy = put (f (get thy)) thy;
5003
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    53
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    54
end;
5642
1b3e48bdbb93 PRIVATE sig parts;
wenzelm
parents: 5003
diff changeset
    55
1b3e48bdbb93 PRIVATE sig parts;
wenzelm
parents: 5003
diff changeset
    56
(*hide private data access functions*)
1b3e48bdbb93 PRIVATE sig parts;
wenzelm
parents: 5003
diff changeset
    57
structure Sign: SIGN = Sign;
1b3e48bdbb93 PRIVATE sig parts;
wenzelm
parents: 5003
diff changeset
    58
structure Theory: THEORY = Theory;