如何创建需要积分列表的函数

时间:2017-09-22 20:57:15

标签: haskell

所以我正在学习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]

但这显然不起作用。

2 个答案:

答案 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。

的列表