|
|
1.1 root 1: (* Copyright 1989 by AT&T Bell Laboratories *)
2: (* stampset.sig *)
3:
4: (* two abstract types: stampset, realization
5:
6: stampset -- represents a set of stamps
7: 'a realization -- represents a (finite) mapping of elements of a stampset to 'a
8:
9: stampsets and stampmaps are objects, in that they have state. The only
10: changes to their states will be to add stamps or mappings, respectively.
11:
12: Each signature will contain a pair of stampsets: a type stampset and a
13: structure stampset. These represent the bound stamps in the signature.
14:
15: Functors will also contain a pair of stampsets specifying the generatively bound
16: stamps in their body structure.
17:
18: A global pair of stampsets will contain the "fixed" or "free" stamps.
19:
20: All type (resp. structure) stampsets will be disjoint.
21:
22: *)
23:
24: signature STAMPSET =
25: sig
26:
27: type stamp
28: type stampset (* represents a set of stamps *)
29: type stampsets (* a record containing two stampsets for structures
30: and type constructors *)
31: type 'a stampmap (* represents a finite mapping over a stampset to type 'a *)
32:
33: val newStampset: unit -> stampset
34: (* generate a new stampset, guaranteed to be disjoint from any
35: existing stampset *)
36:
37: val newStampsets : unit -> stampsets
38: (* generate a record containing two new stampsets *)
39:
40: val member : stamp * stampset -> bool
41: (* tests membership in a stampset *)
42:
43: val newStamp : stampset -> stamp
44: (* generate a new member of the given stampset *)
45:
46: val newMap : stampset * '1a -> '1a stampmap
47: (* generate a new stampmap over a given stampset with given default value *)
48:
49: val updateMap : 'a stampmap -> stamp * 'a -> unit
50: (* add mapping to a stampmap *)
51:
52: val applyMap : 'a stampmap * stamp -> 'a
53: (* apply stampmap to a stamp *)
54:
55: val join : stampset * stampset -> stamp -> stamp
56: (* join(A,B) produces a translation function for elements of B and
57: adds translated version of B to A, side-effecting A *)
58:
59: val fixedStrStamps : stampset
60: val fixedTycStamps : stampset
61: val globalStamps : stampsets
62: val sigStamps : stampset
63:
64: val strFixed : stamp -> bool
65: val tycFixed : stamp -> bool
66:
67: end (* STAMPSET *)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.