## ScopedTypeVariables with nested foralls broken since 8.0.2

The following example fails in 8.2.1 and 8.0.2. Works fine in 7.10.3. If that's intended (that only the first forall has extended scope), I didn't find any mention of that in GHC manual. The two commented out variants work fine in all.

```
{-# LANGUAGE ScopedTypeVariables #-}
main :: IO ()
main = do
-- let f :: forall a ref. ref () -> ()
-- let f :: forall ref. forall a. ref () -> ()
let f :: forall a. forall ref. ref () -> ()
f x = let r :: ref ()
r = x
in ()
return $ f (Just ())
```

The error (the same in 8.2.1 and 8.0.2) is:

```
$ ghc --make forall.hs
[1 of 1] Compiling Main ( forall.hs, forall.o )
forall.hs:8:21: error:
• Couldn't match type ‘ref’ with ‘ref1’
‘ref’ is a rigid type variable bound by
the type signature for:
f :: forall a (ref :: * -> *). ref () -> ()
at forall.hs:6:29
‘ref1’ is a rigid type variable bound by
the type signature for:
r :: forall (ref1 :: * -> *). ref1 ()
at forall.hs:7:22
Expected type: ref1 ()
Actual type: ref ()
• In the expression: x
In an equation for ‘r’: r = x
In the expression:
let
r :: ref ()
r = x
in ()
• Relevant bindings include
r :: ref1 () (bound at forall.hs:8:17)
x :: ref () (bound at forall.hs:7:9)
f :: ref () -> () (bound at forall.hs:7:7)
```

## Trac metadata

Trac field | Value |
---|---|

Version | 8.2.1 |

Type | Bug |

TypeOfFailure | OtherFailure |

Priority | normal |

Resolution | Unresolved |

Component | Compiler (Type checker) |

Test case | |

Differential revisions | |

BlockedBy | |

Related | |

Blocking | |

CC | |

Operating system | |

Architecture |