如果要使用 GHC 的词法范围类型变量,还必须使用显式通用量化。也就是说,您必须在forall
函数的类型签名中添加声明:
{-# LANGUAGE ExplicitForAll, ScopedTypeVariables #-}
f :: forall a . [a] -> [a] -- The `forall` is required here ...
f (x:xs) = xs ++ [x :: a] -- ... to relate this `a` to the ones above.
这实际上是否与量化有关,或者扩展编写者只是将forall
关键字作为一个方便的标记,用于新的、更广泛的范围适用的地方?
换句话说,为什么我们不能forall
像往常一样省略?函数体内注解中的类型变量指的是函数签名中的同名变量,这不是很清楚吗?还是打字会有问题或模棱两可?