我有一些代码:
seqMin a b = (floor (a / b)) - (floor (b / 2.0 ))
seqMax a b = (seqMin a b) + b
test = seqMax 6 3
我期望test
在进行交互式评估时为1。
当我评估代码时,出现错误:
$ ghci split2.hs
GHCi,版本8.6.5:http://www.haskell.org/ghc/ :?寻求帮助[1/1] 编译Main(split2.hs,已解释)
split2.hs:3:8:错误: •使用“ seqMax”导致类型不明确的类型变量“ a0” 阻止解决约束“(RealFrac a0)”。 相关绑定包括test :: a0(绑定在split2.hs:3:1处) 可能的解决办法:使用类型注释来指定应为“ a0”。 这些潜在实例存在: 实例RealFrac Double-在“ GHC.Float”中定义 实例RealFrac Float-在“ GHC.Float”中定义 ...加上一个涉及范围外类型的实例 (使用-fprint-potential-instances查看全部内容) •在表达式中:seqMax 6 3 在“测试”的等式中:test = seqMax 6 3 | 3 |测试= seqMax 6 3 | ^^^^^^^^^^^
split2.hs:3:15:错误: •字面量“ 6”引起的类型变量“ a0”不明确 阻止解决约束“(Num a0)”。 相关绑定包括test :: a0(绑定在split2.hs:3:1处) 可能的解决办法:使用类型注释来指定应为“ a0”。 这些潜在实例存在: 实例Num Integer-在“ GHC.Num”中定义 实例Num Double-在“ GHC.Float”中定义 实例Num Float-在“ GHC.Float”中定义 ...加上另外两个 ...加上两个涉及范围外类型的实例 (使用-fprint-potential-instances查看全部内容) •在“ seqMax”的第一个参数中,即“ 6” 在表达式中:seqMax 6 3 在“测试”的等式中:test = seqMax 6 3 | 3 |测试= seqMax 6 3 | ^失败,未加载任何模块。
(请原谅我的格式。)
当试图弄清楚为什么会出错时,我想到了另一个函数:
f x = (floor (x/2)) + x
当我评估它时,我得到一个错误:
> f 3
:2:1:错误: •由于使用“打印”而导致类型不明确的类型变量“ a0” 阻止解决约束“(Show a0)”。 可能的解决办法:使用类型注释来指定应为“ a0”。 这些潜在实例存在: 实例显示订购-在“ GHC.Show”中定义 实例Show Integer-在“ GHC.Show”中定义 实例Show => Show(可能是a)-在“ GHC.Show”中定义 ...再加上22个人 ...加上涉及范围外类型的19个实例 (使用-fprint-potential-instances查看全部内容) •在交互式GHCi命令的语句中:打印
为什么会发生这种情况,我该如何解决?将来如何预防呢?谢谢!
答案 0 :(得分:0)
这些评论很有帮助。我将/
更改为div
通话,现在可以使用了。谢谢大家!