【发布时间】:2011-06-12 13:35:22
【问题描述】:
我有以下功能:
which (x:xs) = worker x xs
worker x [] = x
worker x (y:ys)
| x > y = worker y ys
| otherwise = worker x ys
我想知道我应该如何定义上述函数which和worker的类型签名?
例如,以下哪种方式最适合作为工人的类型签名?
worker :: Num a => a -> [a] -> a,
或
worker :: Ord a => a -> [a] -> a?
我真的很困惑,不知道我应该选择哪三个。我很感激你的想法。谢谢。
【问题讨论】:
-
你的实际功能是什么for?是为了数字吗?整数?有什么可以订购的吗?
-
@Gabe 输出是一个数字(即
Float或Int),因此上面有>符号。现在我只是不确定应该是Ord a =>...还是Num a =>...真的很困惑!不过感谢您的提问,帮助我从列表中删除了第三个 :-) -
@maclunian:您可以在任何有顺序的东西上使用
>,而不仅仅是数字。这就是为什么首先使用Ord而不是Num起作用的原因。 -
只是
Num不起作用,因为并非所有数字都有顺序,例如复数。 -
出于兴趣,你为什么不用前奏曲中的
minimum?
标签: list function haskell types type-signature