2015-07-10 93 views
1

我一直在寻找上帝知道多久,但不能得到这段代码的工作:哈斯克尔错误

solution n = 3/2*((n-n`mod`3)+3) 

它编译,但是当我叫它,它抛出两个错误,第一个是

No instance for (Integral a0) arising from a use of `solution' 

这里是我想要达到

solution 9 = 3/2* ((n-n`mod`3)+3) = 3/2 * ((9-0)+3) = 3/2 * (12) = 18 

回答

2

哈斯克尔不会让你添加Fractional3/2)到Integral

((n - n `mod` 3) + 3) 

没有明确告诉它,你加入了fromIntegral后者希望。所以

solution n = 3/2 * fromIntegral ((n-n`mod`3)+3) 

应该工作。

Real World haskell中的所有数字类型都有很好的概述。我从来没有记住过细节,大多数情况下,只要需要,就添加fromIntegral