• simonpj@microsoft.com's avatar
    A radical overhaul of the coercion infrastucture · cd0e2c0c
    simonpj@microsoft.com authored
    * Core Lint now does full checking of kinds and coercion terms
      which picks up kind errors in coercions that were previously
      simply not checked for
    * Coercion.lhs now provides optCoercion which optimises coercion
      terms.  It implements all of Dimitrios's rules
    * The constructors for coercion terms now make no attempt to be
      "smart"; instead we rely solely on the coercion optimiser
    * CoercionTyCons in TyCon.lhs always had a "custom" kinding rule
      (the coKindFun field of CoercionTyCon) but its type was not 
      clever enough to do both 
         (a) *figure out the result kind*, assuming the whole thing
             is well-kinded in the first place
         (b) *check* the kinds of everything, failing gracefully if
             they aren't right. 
      We need (b) for the new CoreLint stuff. The field now has type
      which does the job nicely.
Coercion.lhs 32 KB