描述非类型特定的Haskell函数的类型签名的方法是什么?
给定一个像 的函数negate,它具有类型签名:
negate :: Num a => a -> a
我将其描述为a上下文中的类型Num(如果您认为我错了,请纠正我)。
但我不完全确定如何描述last具有类型签名的类似:
last :: [a] -> a
我的猜测是说它不是特定于类型的,并且它需要一个列表并生成一个与列表相同类型的值。这是正确的思考方式吗?
回答
首先,a是不是该在的上下文类型Num,而是一个具有类型的Num实例。
Num a => a -> a是受约束的多态类型,而[a] -> a是不受约束的多态类型,或简称为多态类型。在不受约束的情况下,a可以是任何类型;在受约束的情况下,它必须是遵守给定约束的类型。