src/Pure/Isar/proof_data.ML
author wenzelm
Mon, 09 Nov 1998 15:34:05 +0100
changeset 5829 0acb30dd92bc
parent 5821 262ce90e4736
child 6777 175ff298ac0e
permissions -rw-r--r--
The global Isabelle/Isar outer syntax.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5821
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
     1
(*  Title:      Pure/Isar/proof_data.ML
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
     2
    ID:         $Id$
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
     3
    Author:     Markus Wenzel, TU Muenchen
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
     4
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
     5
Type-safe interface for proof context data.
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
     6
*)
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
     7
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
     8
signature PROOF_DATA_ARGS =
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
     9
sig
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    10
  val name: string
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    11
  type T
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    12
  val init: theory -> T
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    13
  val print: Proof.context -> T -> unit
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    14
end;
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    15
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    16
signature PROOF_DATA =
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    17
sig
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    18
  type T
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    19
  val init: theory -> theory
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    20
  val print: Proof.context -> unit
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    21
  val get: Proof.context -> T
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    22
  val put: T -> Proof.context -> Proof.context
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    23
end;
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    24
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    25
functor ProofDataFun(Args: PROOF_DATA_ARGS): PROOF_DATA =
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    26
struct
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    27
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    28
(*object kind kept private!*)
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    29
val kind = Object.kind Args.name;
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    30
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    31
type T = Args.T;
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    32
exception Data of T;
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    33
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    34
val init =
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    35
  ProofContext.init_data kind
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    36
    (Data o Args.init, fn ctxt => fn (Data x) => Args.print ctxt x);
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    37
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    38
val print = ProofContext.print_data kind;
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    39
val get = ProofContext.get_data kind (fn Data x => x);
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    40
val put = ProofContext.put_data kind Data;
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    41
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    42
end;
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    43
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    44
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    45
(*hide private data access functions*)
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    46
structure ProofContext: PROOF_CONTEXT = ProofContext;
262ce90e4736 Type-safe interface for proof context data.
wenzelm
parents:
diff changeset
    47
structure Proof: PROOF = Proof;