ScopedTypeVariables
ScopedTypeVariables
允许你在声明中引用通用量化类型。更明确一点:
import Data.Monoid
foo::forall a b c. (Monoid b, Monoid c) => (a, b, c) -> (b, c) -> (a, b, c)
foo (a, b, c) (b', c') = (a::a, b'', c'')
where (b'', c'') = (b <> b', c <> c') :: (b, c)
重要的是我们可以使用 a
,b
和 c
来指示编译器声明的子表达式(where
子句中的元组和最终结果中的第一个 a
)。在实践中,ScopedTypeVariables
协助将复杂函数编写为部分之和,允许程序员将类型签名添加到没有具体类型的中间值。