Skip to content
  • Simon Peyton Jones's avatar
    Add right-to-left rule for pattern bindings · eb9bdaef
    Simon Peyton Jones authored and Marge Bot's avatar Marge Bot committed
    Fix #18323 by adding a few lines of code to handle non-recursive
    pattern bindings.  see GHC.Tc.Gen.Bind
    Note [Special case for non-recursive pattern bindings]
    
    Alas, this confused the pattern-match overlap checker; see #18323.
    
    Note that this patch only affects pattern bindings like that
    for (x,y) in this program
    
      combine :: (forall a . [a] -> a) -> [forall a. a -> a]
              -> ((forall a . [a] -> a), [forall a. a -> a])
    
      breaks = let (x,y) = combine head ids
               in x y True
    
    We need ImpredicativeTypes for those [forall a. a->a] types to be
    valid. And with ImpredicativeTypes the old, unprincipled "allow
    unification variables to unify with a polytype" story actually
    works quite well. So this test compiles fine (if delicatedly) with
    old GHCs; but not with QuickLook unless we add this patch
    eb9bdaef