use*_*561 2 haskell higher-rank-types
为什么Haskell在尝试解析这种类型的签名时会抱怨?
f :: (a,s) -> (forall r.(r -> (a,r)),s)
Run Code Online (Sandbox Code Playgroud)
Haskell不支持impredicative类型,特别是不允许forall出现在任何类型的构造函数(除外->)之下.
例如,Maybe (forall a. a), [forall a. a->a], ((forall a. a), Bool)被禁止.
newtype如果这是您想要的,请使用包装器.
newtype T = T (forall a. a->a)
foo :: [T] -- OK
foo = [T id]
Run Code Online (Sandbox Code Playgroud)