【发布时间】:2012-02-22 07:57:38
【问题描述】:
我正在尝试从九十九个haskell 问题中解决problem 10。 这是我认为是正确的解决方案。
pack 函数(来自问题 9)已经正确。问题出在编码函数上。
pack :: (Eq a) => [a] -> [[a]]
pack [] = []
pack (x:xs) = (x : takeWhile (== x) xs) : (pack $ dropWhile (== x) xs)
encode :: (Eq a) => [a] -> [(Int, a)]
encode [] = []
encode list = (encode' $ head packed) : (encode $ tail packed)
where packed = pack list
encode' l = (length l, head l)
当我从 ghci 加载文件时,这是错误:
encode.hs:6:0: 发生检查:无法构造无限类型:a = [a] 概括“编码”的类型时
第6行是包含encode [] = []的行
我的编码功能有什么问题?我不断检查使用的变量的类型,我相信没有错。
函数使用示例(假设代码工作正常):
pack "aaaabbbbccccccddddddd"
> ["aaaa","bbbb","cccccc","ddddddd"]
encode "aaaabbbbccccccddddddd"
> [(4,'a'),(4,'b'),(6,'c'),(7,'d')]
【问题讨论】:
标签: haskell types type-inference