• Simon Peyton Jones's avatar
    Tidy up treatment of FlexibleContexts · b83160d0
    Simon Peyton Jones authored
    Previously (Trac #10351) we could get
    
        Non type-variable argument in the constraint: C [t]
        (Use FlexibleContexts to permit this)
        When checking that `f' has the inferred type
          f :: forall t. C [t] => t -> ()
    
    which is a bit stupid: we have *inferred* a type that we
    immediately *reject*.  This patch arranges that that the
    generalisation mechanism (TcSimplify.decideQuantification)
    doesn't pick a predicate that will be rejected by the
    subsequent validity check.
    
    This forced some minor refactoring, as usual.
    b83160d0
DynFlags.hs 172 KB