我将此作为一个模式匹配练习。
我希望有一个函数,将工作在Num
类型和List
类型。例如:
double 20
double [1,2,3,4,5]
代码工作到
double [] = []
double (x : xs) = (2 * x) : (double xs)
main = do
let x = [1,2,3,4,5]
print (double x)
但当我试着:
double x = x + x
double [] = []
double (x : xs) = (2 * x) : (double xs)
main = do
let x = [1,2,3,4,5]
print (double 20)
print (double x)
它会产生错误。
这里应该怎么办?
2条答案
按热度按时间nmpmafwu1#
正如chi所提到的,最好有单独的函数,我想补充的是,特别是在学习的时候,考虑和编写函数的类型签名是一个good habit。
为了回答你的问题,你还是可以这样做的。
您告诉Haskell
Integer
和[Integer]
数据类型“可以加倍”,然后定义如何为每种类型加倍。我知道这比您所要求的要高级得多:)k5ifujac2#
除了哈伦的答案中的using typeclasses,你还可以使用
Either Int [Int]
。