Typechecking fails for parallel monad comprehensions with polymorphic let (GHC 7.10.3 through 8.6.3)
{-# LANGUAGE MonadComprehensions, ParallelListComp #-}
module Foo where
foo xs ys = [ (f y True, f x 'c')
| let f _ z = z, x <- xs
| y <- ys ]
This fails with
Foo.hs:5:52: error:
* Cannot instantiate unification variable `t0'
with a type involving foralls: forall t2 t3. t3 -> t2 -> t2
GHC doesn't yet support impredicative polymorphism
* In a stmt of a monad comprehension:
let f _ z = z, x <- xs | y <- ys
In the expression:
[(f y True, f x 'c') | let f _ z = z, x <- xs | y <- ys]
In an equation for `foo':
foo xs ys
= [(f y True, f x 'c') | let f _ z = z, x <- xs | y <- ys]
NB: ApplicativeDo
has a related problem: the implementation is quite different and has the effect of monomorphising the let-bound variable.
Trac metadata
Trac field | Value |
---|---|
Version | 7.10.3 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |