对Haskell数字类型感到困惑

时间:2016-10-08 16:59:31

标签: haskell

我尝试创建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询问加载代码的类型并在源文件中明确包含这些类型时,我会在加载时收到错误消息。当我尝试将类型明确限制为IntegerInt时,我会收到更多错误消息。

我很欣赏一些建议。感谢。

1 个答案:

答案 0 :(得分:1)

logBase需要浮动,但不是

这有效:

[0 .. floor (logBase 10 $ fromIntegral num)]