【发布时间】:2015-03-03 12:16:24
【问题描述】:
在 GHCiOnline 中,let listRestDiv 4 = floor(4/(fromInteger (nextPrimeDiv 4))) 确实有效,但一般
let listRestDiv n = floor(n/(fromInteger (nextPrimeDiv n)))
不接受,其中nextPrimeDiv n 由
let nextPrimeDiv n = head [x|x<-[1..n], n `mod` x == 0, x/=1]
只返回下一个素数。
上面写着:
无法推断 (RealFrac Integer) 由使用 `floor' 引起 由 listRestDiv 的推断类型绑定的上下文 (Integral b) :: 积分 b => 整数 -> b at
到此结束。我只是不明白这里的类型。 提前感谢您的任何提示。
【问题讨论】:
-
添加类型是个好习惯,在这种情况下它会解决问题。
-
正如@KarolyHorvath 所指出的,为所有顶级标识符以及一些非顶级标识符和表达式编写类型签名是一种很好的做法。这样做可以让您检查编译器,以确保你们两个在继续其他事情之前就您定义的类型达成一致。虽然这个特殊的问题是一个相当简单的问题,但总有一天,你会得到一些对你来说毫无意义的可怕的类型检查器——添加尽可能多的类型签名将帮助你准确地找出错误所在。
ScopedTypeVariables有时会很有帮助。