Adding signatures to pattern bindings with impredicative types breaks them
Consider the following declarations:
ids :: [forall a. a -> a]
ids = [id,id]
Just test1 = Just ids
test2 :: [forall a. a -> a]
Just test2 = Just ids
test1
typechecks while test2
fails with the following error:
/Users/artin/Programming/projects/playground/src/PatBind.hs:43:6-10: error: [GHC-91028]
• Couldn't match expected type ‘a0’
with actual type ‘[forall a. a -> a]’
Cannot instantiate unification variable ‘a0’
with a type involving polytypes: [forall a. a -> a]
• In the pattern: Just test2
In a pattern binding: Just test2 = Just ids
|
43 | Just test2 = Just ids
| ^^^^^/Users/artin/Programming/projects/playground/src/PatBind.hs:43:14-21: error: [GHC-91028]
• Couldn't match type ‘a0’ with ‘[forall a. a -> a]’
Expected: Maybe a0
Actual: Maybe [forall a. a -> a]
Cannot instantiate unification variable ‘a0’
with a type involving polytypes: [forall a. a -> a]
• In the expression: Just ids
In a pattern binding: Just test2 = Just ids
|
43 | Just test2 = Just ids
| ^^^^^^^^
Failed, no modules to be reloaded.
GHC version: latest nightly: 9.11.20240412
Edited by Artin Ghasivand