diff options
Diffstat (limited to 'compiler/coreSyn/CoreSyn.hs')
-rw-r--r-- | compiler/coreSyn/CoreSyn.hs | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/compiler/coreSyn/CoreSyn.hs b/compiler/coreSyn/CoreSyn.hs index 2a5752ccb7..00b778a253 100644 --- a/compiler/coreSyn/CoreSyn.hs +++ b/compiler/coreSyn/CoreSyn.hs @@ -439,12 +439,12 @@ The levity-polymorphism invariants are these: * The type of a term-binder must not be levity-polymorphic * The type of the argument of an App must not be levity-polymorphic. -A type (t::TYPE v r) is "levity polymorphic" if 'r' has any free variables. +A type (t::TYPEV v r) is "levity polymorphic" if 'r' has any free variables. (It's OK from the code generator's point-of-view if v has free variables.) For example - \(r::RuntimeRep). \(a::TYPEvis r). \(x::a). e -is illegal because x's type has kind (TYPEvis r), which has 'r' free. + \(r::RuntimeRep). \(a::TYPE r). \(x::a). e +is illegal because x's type has kind (TYPE r), which has 'r' free. See Note [Levity polymorphism checking] in DsMonad to see where these invariants are established for user-written code. |