Int to Float转换:Num [Int]没有实例

时间:2012-10-18 21:22:20

标签: haskell floating-point int

我需要使用map函数来获得pence到磅的转换。 抱歉这个愚蠢的问题..但我是初学者。

del :: Int -> Float
del x =  ( fromIntegral x ) / 100

pounds :: [Int] -> [Float]
pounds = map del 

我收到此错误..

*Main> pounds 45
<interactive>:90:8:
    No instance for (Num [Int])
      arising from the literal `45'
    Possible fix: add an instance declaration for (Num [Int])
    In the first argument of `pounds', namely `45'
    In the expression: pounds 45
    In an equation for it': it = pounds 45

3 个答案:

答案 0 :(得分:8)

好像你打字了

ghci> pounds 45

在提示符下。但是pounds期望一个列表(Int)作为其参数。你应该使用

ghci> del 45

那里,或

ghci> pounds [45]

由于整数文字具有隐式fromInteger,因此GHC会尝试查找转换fromInteger :: Integer -> [Int],这需要instance Num [Int],但它无法找到一个,{&#39} ; s报告的错误。

答案 1 :(得分:4)

pounds仅适用于列表,但您在数字上使用它。

pounds [45]

会正常工作。

通常当编译器说它缺少一个实例时,通常意味着你的参数是错误的类型或缺失。

答案 2 :(得分:2)

pounds的论据必须是Int列表,而不是孤立的Int

尝试改为pounds [45]