Annotation of researchv10no/cmd/sml/src/basics/basics.sig, revision 1.1.1.1

1.1       root        1: (* Copyright 1989 by AT&T Bell Laboratories *)
                      2: (* basics.sig *)
                      3: 
                      4: (* basic datatypes *)
                      5: 
                      6: signature BASICS = sig
                      7: 
                      8:     structure Symbol : SYMBOL
                      9:           and Access : ACCESS
                     10:          and IntStrMap : INTSTRMAP
                     11:          and Stampset : STAMPSET
                     12:       sharing Access.Symbol = Symbol (*sharing added, mt*)
                     13: 
                     14:     type spath (* = symbol list *)
                     15:     type label (* = symbol *)
                     16:     type stamp (* = int *)
                     17:     type polysign (* = {weakness: int, eq: bool} list *)
                     18:     type sharespec (* = {s: (spath*spath) list,
                     19:                      t: (spath*spath) list} *)
                     20: 
                     21: 
                     22:     datatype bool3 = YES | NO | MAYBE
                     23: 
                     24:     datatype fixity = NONfix | INfix of (int*int)
                     25: 
                     26:     datatype conrep
                     27:       = UNDECIDED 
                     28:       | TAGGED of int 
                     29:       | CONSTANT of int 
                     30:       | TRANSPARENT 
                     31:       | TRANSU
                     32:       | TRANSB
                     33:       | REF
                     34:       | VARIABLE of Access.access  (* exception constructor *)
                     35: 
                     36:     val infinity : int
                     37: 
                     38:     type tyvar  (* = tvkind ref *)
                     39:     type binder
                     40:     type symtable
                     41: 
                     42:     datatype tvkind      (* type variable kinds *)
                     43:       = IBOUND of int   (* inferred bound type variables -- indexed *) 
                     44:       | META of                 (* metavariables -- depth < infinity for lambda bound *)
                     45:          {depth: int,
                     46:           weakness: int,
                     47:           eq: bool}
                     48:       | INSTANTIATED of ty
                     49:       | UBOUND of        (* user bound type variables -- user name *)
                     50:          {name: Symbol.symbol,
                     51:           weakness: int,
                     52:           eq: bool}
                     53: 
                     54:     and datacon  (* exceptions are a special case with rep=VARIABLE() *)
                     55:       = DATACON of
                     56:          {name  : Symbol.symbol,
                     57:           const : bool,
                     58:           typ   : ty ref,
                     59:           rep   : conrep,
                     60:           sign  : conrep list}
                     61: 
                     62:     and tyckind
                     63:       = ABStyc (* atomic and abstract types *)
                     64:       | DEFtyc of tyfun
                     65:       | DATAtyc of datacon list
                     66:       | RECORDtyc of label list
                     67:       | UNDEFtyc of Symbol.symbol list option
                     68: 
                     69:     and tycon
                     70:       = TYCON of
                     71:          {stamp : stamp,
                     72:           arity : int,
                     73:           eq    : bool3 ref,
                     74:           path  : Symbol.symbol list,
                     75:           kind  : tyckind}
                     76:       | INDtyc of int   (* indirect tycon -- only in bindings (in sigs) *)
                     77:       | SHRtyc of int list   (* sharing indirection -- probably not used *)
                     78:       | RELtyc of int list   (* relative tycon -- only in type expressions *)
                     79:       | NULLtyc
                     80: 
                     81:     and ty 
                     82:       = VARty of tyvar
                     83:       | CONty of tycon ref * ty list
                     84:       | FLEXRECORDty of rowty ref
                     85:       | POLYty of {sign: {weakness:int, eq:bool} list, tyfun: tyfun}
                     86:       | UNDEFty
                     87:       | ERRORty
                     88: 
                     89:     and rowty
                     90:       = OPEN of (label * ty) list
                     91:       | CLOSED of ty
                     92: 
                     93:     and tyfun
                     94:       = TYFUN of
                     95:           {arity : int,
                     96:           body : ty}
                     97: 
                     98:     and var
                     99:       = VALvar of                    (* ordinary variables *)
                    100:          {access : Access.access,
                    101:           name : Symbol.symbol list,
                    102:           typ : ty ref}
                    103:       | OVLDvar of                           (* overloaded identifier *)
                    104:          {name : Symbol.symbol,
                    105:           options: {indicator: ty, variant: var} list ref,
                    106:           scheme: tyfun}
                    107:       | UNKNOWNvar of Symbol.symbol        (* place holder for backpatching *)
                    108: 
                    109:     and strenv 
                    110:       =        DIR
                    111:       | REL of {s: Structure array, t: tycon array}
                    112: 
                    113:     and strkind
                    114:       = STRkind of
                    115:          {path : Symbol.symbol list}
                    116:       | SIGkind of
                    117:          {share : sharespec,
                    118:           bindings : binding list,
                    119:           stamps : Stampset.stampsets}
                    120: 
                    121:     and Structure
                    122:       = STRstr of
                    123:          {stamp : stamp,
                    124:           sign  : stamp,
                    125:           table : symtable,
                    126:           env   : strenv,
                    127:           kind  : strkind}
                    128:       | INDstr of int        (* indirect substructure binding *)
                    129:       | SHRstr of int list   (* sharing indirection *)
                    130:       | NULLstr
                    131: 
                    132:     and Functor
                    133:       = FUNCTOR of
                    134:          {paramName: Symbol.symbol,
                    135:           param: Structure,
                    136:           body: Structure,
                    137:           paramVis: bool,
                    138:           stamps: Stampset.stampsets}
                    139: 
                    140:     and signatureVar
                    141:       = SIGvar of
                    142:          {name: Symbol.symbol,
                    143:           binding: Structure}
                    144: 
                    145:     and structureVar
                    146:       = STRvar of
                    147:          {name: Symbol.symbol list,
                    148:           access: Access.access,          
                    149:           binding: Structure}
                    150: 
                    151:     and functorVar   (* tentative *)
                    152:       = FCTvar of
                    153:          {name: Symbol.symbol,
                    154:           access: Access.access,          
                    155:           binding: Functor}
                    156: 
                    157:     and fixityVar
                    158:       = FIXvar of
                    159:          {name: Symbol.symbol,
                    160:           binding: fixity}
                    161: 
                    162:     and binding 
                    163:       = VARbind of var  
                    164:       | CONbind of datacon
                    165:       | TYCbind of tycon ref (* patchable *)
                    166:       | TYVbind of tyvar
                    167:       | SIGbind of signatureVar
                    168:       | STRbind of structureVar
                    169:       | FCTbind of functorVar
                    170:       | FIXbind of fixityVar
                    171: 
                    172:     datatype trans
                    173:       = VALtrans of Access.access
                    174:           (* old position, val, exn, or unthinned str *)
                    175:       | THINtrans of Access.access * Access.lvar * trans list
                    176:            (* old str position, substr thinning *)
                    177:       | CONtrans of datacon            (* constructor as value component *)
                    178:     type thinning
                    179: 
                    180:     (* whew! *)
                    181: 
                    182:     val infixleft : int -> fixity
                    183:     val infixright : int -> fixity
                    184: 
                    185:     val mkVALvar : Symbol.symbol * ty ref ->  var
                    186: 
                    187:     val mkTyvar   : tvkind -> tyvar
                    188:     val mkABStyc : Symbol.symbol list * int * bool3 * Stampset.stampsets -> tycon
                    189:     val mkDEFtyc : Symbol.symbol list * tyfun * bool3 * Stampset.stampsets -> tycon
                    190:     val mkDATAtyc : Symbol.symbol list * int * datacon list * bool3 * Stampset.stampsets
                    191:                     -> tycon
                    192:     val mkUNDEFtyc : Symbol.symbol * int -> tycon
                    193: 
                    194:     val mkSTR : Symbol.symbol list * symtable * strenv * Stampset.stampsets -> Structure
                    195:       (* make a new "unsigned" structure *)
                    196: 
                    197: end (* signature BASICS *)

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.