mac*_*ian 1 haskell types function list type-signature
我有以下功能:
which (x:xs) = worker x xs
worker x [] = x
worker x (y:ys)
| x > y = worker y ys
| otherwise = worker x ys
Run Code Online (Sandbox Code Playgroud)
我想知道如何定义上述功能的类型签名which和worker?
例如,以下哪种方式最适合作为工人的类型签名?
worker :: Num a => a -> [a] -> a,
要么
worker :: Ord a => a -> [a] -> a?
我真的很困惑,不知道我应该选择哪三个.我很感激你的想法.谢谢.
如果您定义没有显式类型签名的函数,Haskell将推断出最常见的类型.如果您不确定,这是弄清楚如何阅读定义的最简单方法; 然后,您可以将其复制到源代码中.一个常见的错误是错误地键入一个函数,然后在其他地方遇到一个令人困惑的类型错误.
无论如何,您可以Num通过输入:i Numghci或阅读文档来获取有关该类的信息.该Num班给你+,*,-,negate,abs,signum,fromInteger,以及各项功能Eq和Show.请注意,<与>不存在!要求Num并尝试比较它们的值实际上会产生类型错误 - 不是每种类型的数字都可以进行比较.
所以它应该是Ord a => ...,Num a => ...如果你尝试它会产生类型错误.