Haskell编写整数列表求和函数时类型匹配错误如何解决?
问题原因
你的报错核心是函数类型签名与实际实现的类型不匹配:
- 标准库
sum函数的类型为(Foldable t, Num a) => t a -> a,当作用于整数列表时,实际接受的参数类型是[Integer],返回Integer类型 - 你写的类型签名里使用了
List作为入参类型,Haskell标准库中没有预定义名为List的类型,自然无法和sum能接受的集合类型匹配,所以抛出类型匹配错误。
解决方案
分两种场景处理:
场景1:使用Haskell标准列表类型
直接修改函数的类型签名即可,修正后完整代码如下:
-- sumList:标准整数列表求和 sumList :: [Integer] -> Integer sumList l = sum l
场景2:你自定义了泛型List代数类型
如果你自己定义了类似data List a = Nil | Cons a (List a)的自定义列表类型,有两种解决方式:
- 给自定义
List类型实现Foldable类型类实例,即可直接复用sum函数 - 手动递归实现求和逻辑,示例代码如下:
-- 自定义List类型定义示例 data List a = Nil | Cons a (List a) -- 手动实现自定义List的求和逻辑 sumList :: List Integer -> Integer sumList Nil = 0 sumList (Cons x rest) = x + sumList rest
内容的提问来源于stack exchange,提问作者SourceCodeEngineer
相关产品推荐
相关产品推荐

