当我尝试混合最小,除法和加法时,为什么Haskell会抱怨?

时间:2020-04-25 14:32:00

标签: haskell

我有一些代码:

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命令的语句中:打印

为什么会发生这种情况,我该如何解决?将来如何预防呢?谢谢!

1 个答案:

答案 0 :(得分:0)

这些评论很有帮助。我将/更改为div通话,现在可以使用了。谢谢大家!

相关问题