|
|
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.