Skip to content
  • Simon Peyton Jones's avatar
    [project @ 2003-12-30 16:29:17 by simonpj] · f714e6b6
    Simon Peyton Jones authored
    ----------------------------
            Re-do kind inference (again)
    	----------------------------
    
       [WARNING: interface file binary representation has
       (as usual) changed slightly; recompile your libraries!]
    
    Inspired by the lambda-cube, for some time GHC has used
    	type Kind = Type
    That is, kinds were represented by the same data type as types.
    
    But GHC also supports unboxed types and unboxed tuples, and these
    complicate the kind system by requiring a sub-kind relationship.
    Notably, an unboxed tuple is acceptable as the *result* of a
    function but not as an *argument*.  So we have the following setup:
    
    		 ?
    		/ \
    	       /   \
    	      ??   (#)
    	     /  \
                *   #
    
    where	*    [LiftedTypeKind]   means a lifted type
    	#    [UnliftedTypeKind] means an unlifted type
    	(#)  [UbxTupleKind]     means unboxed tuple
    	??   [ArgTypeKind]      is the lub of *,#
    	?    [OpenTypeKind]	means any type at all
    
    In particular:
    
      error :: forall a:?. String -> a
      (->)  :: ?? -...
    f714e6b6