我尝试创建foldr
示例,将Integral
转换为数字列表(即[Int]
)。
pickDigit num pos = (num `div` (10^pos)) `mod` 10
toDigits num = foldr (\pos acc -> (pickDigit num pos):acc) [] [0 .. floor (logBase 10 num)]
此加载成功。但是当我尝试运行它时,例如
> toDigits 1234
我收到了一条我不明白的类型错误消息。
当我向Haskell询问加载代码的类型并在源文件中明确包含这些类型时,我会在加载时收到错误消息。当我尝试将类型明确限制为Integer
或Int
时,我会收到更多错误消息。
我很欣赏一些建议。感谢。
答案 0 :(得分:1)
logBase
需要浮动,但不是
这有效:
[0 .. floor (logBase 10 $ fromIntegral num)]