我只是在Haskell中编写一个简单的代码,
coo x y = ((lim-1)*y*(y-1)`div`2) + (y*(y-1)*(sum (map (\j->(x`div`j)-j) [2..lim] )))
where
lim = floor (sqrt x)
但是当我使用' coo 10 10'在ghci中,它给出了以下错误:
<interactive>:3:1:
No instance for (Floating a0) arising from a use of ‘it’
The type variable ‘a0’ is ambiguous
Note: there are several potential instances:
instance Floating Double -- Defined in ‘GHC.Float’
instance Floating Float -- Defined in ‘GHC.Float’
In the first argument of ‘print’, namely ‘it’
In a stmt of an interactive GHCi command: print it
发生什么事了?我确信我匹配所有类型的正确。
答案 0 :(得分:4)
如果仔细观察(或询问GHCi),您会看到您的函数具有类型
coo :: (Floating a, Integral a, RealFrac a) => a -> a -> a
告诉GHC使用a
和Floating
的某种类型Integral
,这将变得困难(Prelude中没有此类型)
我不是100%确定您要做的是什么,但解决此问题的一种方法是将lim
更改为:
lim = floor (sqrt $ fromIntegral x)
这将产生
λ> coo 10 10
360