Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Diff of /sml/branches/primop-branch-2/src/compiler/FLINT/kernel/ltykernel.sig
ViewVC logotype

Diff of /sml/branches/primop-branch-2/src/compiler/FLINT/kernel/ltykernel.sig

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2013, Fri Aug 11 04:09:23 2006 UTC revision 2014, Fri Aug 11 20:42:24 2006 UTC
# Line 1  Line 1 
1  (* COPYRIGHT (c) 1997 YALE FLINT PROJECT *)  (* COPYRIGHT (c) 1997 YALE FLINT PROJECT *)
2  (* ltykernel.sig *)  (* ltykernel.sig *)
3    
4  signature LTYKERNEL = sig  signature LTYKERNEL =
5    sig
6    
7  (* definitions of kind and kind-environment *)  type tkind = Lty.tkind
8  type tkind  type fflag = Lty.fflag
9    type rflag = Lty.rflag
10  datatype tkindI  type tvar = Lty.tvar
11    = TK_MONO                                   (* ground mono tycon *)  type tyc = Lty.tyc
12    | TK_BOX                                    (* boxed/tagged tycon *)  type lty = Lty.lty
13    | TK_SEQ of tkind list                      (* sequence of tycons *)  type token = Lty.token
14    | TK_FUN of tkind list * tkind              (* tycon function *)  type tycEnv = Lty.tycEnv
   
 (* definitions of named tyc variables *)  
 type tvar = LambdaVar.lvar                    (* temporary, not used *)  
 val mkTvar : unit -> tvar                     (* temporary, not used *)  
   
 (* definitions of tyc and tyc-environment *)  
 type tyc  
 type tycEnv  
 type token                                    (* a hook to add new tyc *)  
   
 datatype fflag                                (* calling conventions *)  
   = FF_VAR of bool * bool                     (* is it fixed ? *)  
   | FF_FIXED                                  (* used after rep. analysis *)  
   
 datatype rflag = RF_TMP                       (* tuple kind: a template *)  
   
 datatype tycI  
   = TC_VAR of DebIndex.index * int            (* tyc variable *)  
   | TC_NVAR of tvar                           (* named tyc variable *)  
   | TC_PRIM of PrimTyc.primtyc                (* primitive tyc *)  
   | TC_FN of tkind list * tyc                 (* tyc abstraction *)  
   | TC_APP of tyc * tyc list                  (* tyc application *)  
   | TC_SEQ of tyc list                        (* tyc sequence *)  
   | TC_PROJ of tyc * int                      (* tyc projection *)  
   
   | TC_SUM of tyc list                        (* sum tyc *)  
   | TC_FIX of (int * tyc * tyc list) * int    (* recursive tyc *)  
   
   | TC_TUPLE of rflag * tyc list              (* std record tyc *)  
   | TC_ARROW of fflag * tyc list * tyc list   (* std function tyc *)  
   | TC_PARROW of tyc * tyc                    (* special fun tyc, not used *)  
   
   | TC_BOX of tyc                             (* boxed tyc *)  
   | TC_ABS of tyc                             (* abstract tyc *)  
   | TC_TOKEN of token * tyc                   (* extensible token tyc *)  
   | TC_CONT of tyc list                       (* std continuation tyc *)  
   | TC_IND of tyc * tycI                      (* indirect tyc thunk *)  
   | TC_ENV of tyc * int * int * tycEnv        (* tyc closure *)  
   
 (* definition of lty *)  
 type lty  
 datatype ltyI  
   = LT_TYC of tyc                             (* monomorphic type *)  
   | LT_STR of lty list                        (* structure type *)  
   | LT_FCT of lty list * lty list             (* functor type *)  
   | LT_POLY of tkind list * lty list          (* polymorphic type *)  
   
   | LT_CONT of lty list                       (* internal cont type *)  
   | LT_IND of lty * ltyI                      (* indirect type thunk *)  
   | LT_ENV of lty * int * int * tycEnv        (* type closure *)  
15    
16  (** injections and projections on tkind, tyc, and lty *)  (** injections and projections on tkind, tyc, and lty *)
17  val tk_inj   : tkindI -> tkind  val tk_inj   : Lty.tkindI -> tkind
18  val tc_inj   : tycI -> tyc  val tc_inj   : Lty.tycI -> tyc
19  val lt_inj   : ltyI -> lty  val lt_inj   : Lty.ltyI -> lty
20    
21  val tk_out   : tkind -> tkindI  val tk_out   : tkind -> Lty.tkindI
22  val tc_out   : tyc -> tycI  val tc_out   : tyc -> Lty.tycI
23  val lt_out   : lty -> ltyI  val lt_out   : lty -> Lty.ltyI
   
 (** key comparison for tkind, tyc, and lty; used in pickling *)  
 val tk_cmp   : tkind * tkind -> order  
 val tc_cmp   : tyc * tyc -> order  
 val lt_cmp   : lty * lty -> order  
   
 (** get the hash key of each lty, used by reps/coerce.sml; a hack! *)  
 val lt_key   : lty -> int  
24    
25  (** testing equivalence of tkinds, tycs, ltys, fflags, and rflags *)  (** testing equivalence of tkinds, tycs, ltys, fflags, and rflags *)
26  val tk_eqv   : tkind * tkind -> bool  val tk_eqv   : tkind * tkind -> bool
# Line 90  Line 33 
33  val tc_eqv_x : tyc * tyc -> bool  val tc_eqv_x : tyc * tyc -> bool
34  val lt_eqv_x : lty * lty -> bool  val lt_eqv_x : lty * lty -> bool
35    
 (** utility functions on tycEnv *)  
 exception tcUnbound of tycEnv * tyc  
 val initTycEnv : tycEnv  
 val tcInsert : tycEnv * (tyc list option * int) -> tycEnv  
 val tcSplit : tycEnv -> ((tyc list option * int) * tycEnv) option  
 (* val tycEnvOut : tycEnv -> tycI *)  
   
 (** testing if a tyc (or lty) is in the normal form *)  
 val tcp_norm : tyc -> bool  
 val ltp_norm : lty -> bool  
   
36  (** finding out the depth for a tyc's innermost-bound free variables *)  (** finding out the depth for a tyc's innermost-bound free variables *)
37  val tc_depth : tyc * DebIndex.depth -> DebIndex.depth  val tc_depth : tyc * DebIndex.depth -> DebIndex.depth
38  val tcs_depth: tyc list * DebIndex.depth -> DebIndex.depth  val tcs_depth: tyc list * DebIndex.depth -> DebIndex.depth
39  val tc_nvars : tyc -> tvar list  val tc_nvars : tyc -> tvar list
40  val lt_nvars : lty -> tvar list  val lt_nvars : lty -> tvar list
41    
 (** utility functions on tkindEnv *)  
 type tkindEnv  
 exception tkUnbound  
 val initTkEnv        : tkindEnv  
 val tkLookup         : tkindEnv * int * int -> tkind  
 val tkInsert         : tkindEnv * tkind list -> tkindEnv  
 val tkLookupFreeVars : tkindEnv * tyc -> tkind list option  
   
42  (** utility functions for TC_ENV and LT_ENV types *)  (** utility functions for TC_ENV and LT_ENV types *)
43  val tcc_env  : tyc * int * int * tycEnv -> tyc  val tcc_env  : tyc * int * int * tycEnv -> tyc
44  val ltc_env  : lty * int * int * tycEnv -> lty  val ltc_env  : lty * int * int * tycEnv -> lty
# Line 150  Line 74 
74  (** primitive TC_WRAP constructor, built through the token facility *)  (** primitive TC_WRAP constructor, built through the token facility *)
75  val wrap_token    : token  val wrap_token    : token
76    
 (** pretty printing of tkinds, tycs, and ltys *)  
 (* (temporarily?) moved from ltybasic.sig *)  
 val tk_print   : tkind -> string  
 val tc_print   : tyc -> string  
 val lt_print   : lty -> string  
   
77  end (* signature LTYKERNEL *)  end (* signature LTYKERNEL *)

Legend:
Removed from v.2013  
changed lines
  Added in v.2014

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0