X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Ftypes%2FTypeRep.lhs;h=db41403a4b46b009779dbc5e342d579b63e19cfb;hp=0f400fadcd9d77b3efed8f5d76f3d7badd25c7c3;hb=914e415702a25a6e52ab1eaaf2aea233d6c6097e;hpb=b855273185a7b86c65172c10674c98bab1052e2c diff --git a/compiler/types/TypeRep.lhs b/compiler/types/TypeRep.lhs index 0f400fa..db41403 100644 --- a/compiler/types/TypeRep.lhs +++ b/compiler/types/TypeRep.lhs @@ -145,11 +145,12 @@ data Type -- can appear as the right hand side of a type synonym. | FunTy - Type + Type Type -- ^ Special case of 'TyConApp': @TyConApp FunTyCon [t1, t2]@ + -- See Note [Equality-constrained types] | ForAllTy - TyCoVar -- ^ Type *or* coercion variable; see Note [Equality-constrained types] + TyCoVar -- Type variable Type -- ^ A polymorphic type | PredTy @@ -183,21 +184,9 @@ The type forall ab. (a ~ [b]) => blah is encoded like this: ForAllTy (a:*) $ ForAllTy (b:*) $ - ForAllTy (wild_co : a ~ [b]) $ + FunTy (PredTy (EqPred a [b]) $ blah -That is, the "(a ~ [b]) =>" part is encode as a for-all -type with a coercion variable that is never mentioned. - -We could instead have used a FunTy with an EqPred on the -left. But we want - - * FunTy to mean RUN-TIME abstraction, - passing a real value at runtime, - - * ForAllTy to mean COMPILE-TIME abstraction, - erased at runtime - ------------------------------------- Note [PredTy]