如果您想使用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
?在函数体注释中,类型变量引用函数签名中同名变量不是很清楚吗?或者类型检查会出现问题或模棱两可吗?