src/Pure/theory_data.ML
author oheimb
Fri, 02 Jun 2000 17:46:32 +0200
changeset 9020 1056cbbaeb29
parent 8142 37d3b5a4ebae
child 12123 739eba13e2cd
permissions -rw-r--r--
added split_eta_SetCompr2 (also to simpset), generalized SetCompr_Sigma_eq
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
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
     4
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
     5
Type-safe interface for theory data.
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
     6
*)
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
     7
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
     8
signature THEORY_DATA_ARGS =
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
     9
sig
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    10
  val name: string
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    11
  type T
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    12
  val empty: T
6546
995a66249a9b theory data: copy;
wenzelm
parents: 5642
diff changeset
    13
  val copy: T -> T
5003
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    14
  val prep_ext: T -> T
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    15
  val merge: T * T -> T
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    16
  val print: Sign.sg -> T -> unit
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    17
end;
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    18
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    19
signature THEORY_DATA =
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    20
sig
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    21
  type T
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    22
  val init: theory -> theory
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    23
  val print: theory -> unit
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    24
  val get_sg: Sign.sg -> T
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    25
  val get: theory -> T
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    26
  val put: T -> theory -> theory
8142
37d3b5a4ebae added map;
wenzelm
parents: 7348
diff changeset
    27
  val map: (T -> T) -> theory -> theory
5003
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    28
end;
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    29
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    30
functor TheoryDataFun(Args: THEORY_DATA_ARGS): THEORY_DATA =
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    31
struct
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    32
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    33
(*object kind kept private!*)
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    34
val kind = Object.kind Args.name;
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    35
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    36
type T = Args.T;
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    37
exception Data of T;
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    38
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    39
val init =
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    40
  Theory.init_data kind
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    41
    (Data Args.empty,
6546
995a66249a9b theory data: copy;
wenzelm
parents: 5642
diff changeset
    42
      fn (Data x) => Data (Args.copy x),
5003
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    43
      fn (Data x) => Data (Args.prep_ext x),
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    44
      fn (Data x1, Data x2) => Data (Args.merge (x1, x2)),
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    45
      fn sg => fn (Data x) => Args.print sg x);
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    46
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    47
val print = Theory.print_data kind;
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    48
val get_sg = Sign.get_data kind (fn Data x => x);
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    49
val get = get_sg o Theory.sign_of;
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    50
val put = Theory.put_data kind Data;
8142
37d3b5a4ebae added map;
wenzelm
parents: 7348
diff changeset
    51
fun map f thy = put (f (get thy)) thy;
5003
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    52
f73ad32e44d3 Type-safe interface for theory data.
wenzelm
parents:
diff changeset
    53
end;
5642
1b3e48bdbb93 PRIVATE sig parts;
wenzelm
parents: 5003
diff changeset
    54
1b3e48bdbb93 PRIVATE sig parts;
wenzelm
parents: 5003
diff changeset
    55
(*hide private data access functions*)
1b3e48bdbb93 PRIVATE sig parts;
wenzelm
parents: 5003
diff changeset
    56
structure Sign: SIGN = Sign;
1b3e48bdbb93 PRIVATE sig parts;
wenzelm
parents: 5003
diff changeset
    57
structure Theory: THEORY = Theory;