所以我正在学习Haskell上学,并在learnyouahaskell学习函数,语法和类型类,并且想知道我会创建一个以Integral列表作为参数的函数吗?
如果我理解正确的话:
addVectors :: (Num a) => (a,a) -> (a,a) -> (a,a)
addVectors (x1,y1) (x2,y2) = (x1 + x2, y1 + y2)
addVectors接受两组,基本上所有参数都必须是Number类?但是,如果我想要它列入数字或积分列表呢?
addList :: (Integral [b]) => [b] -> [b]
但这显然不起作用。
答案 0 :(得分:5)
addList :: (Integral b) => [b] -> [b]
我们在这里说b
类型必须是Integral
的实例,而addList
会获取并返回b
的列表。
答案 1 :(得分:3)
Integral a
表示a
是一个整数,您可以在a
上执行函数,例如div :: Integral a => a -> a -> a
。
因此,如果您需要[a]
的{{1}}列表,则表示Integral
应为a
。所以你应该写:
Integral
此外请注意,输出类型可能是addList :: Integral b => [b] -> b
,因为您将列表一起折叠为一个这样的数字。
如果您想增加例如所有数字(或对数字执行另一个操作),则类型为:
b
因为现在我们指定输出是addList :: Integral b => [b] -> [b]
s。