Haskell类型类 - div和/之间的区别?

时间:2016-05-30 17:32:42

标签: haskell read-eval-print-loop

当我在Ghci中查询div中缀运算符和div运算符的类型时,我发现/具有签名div(div) :: Integral a => a -> a -> a具有签名/。虽然他们完成了同样的事情,但类型类(/) Fractional a => a -> a -> aFractional之间有什么区别?

1 个答案:

答案 0 :(得分:4)

这些操作之间存在概念上的差异:

  • div与余数分开(请参阅euclidean domain
  • (/)是小数除法 - 这是对(*)操作

认为5 / 2 = 2.5 vs 5 `div` 2 = 2

之间的区别仅在于

  • Integral代表您可以使用
  • 进行分割的数字
  • Fractional用于a/b形式的类似理性的数字 - 考虑1/22/7等。

如果您将FractionalIntegraldiv(/)操作混合在前奏中,这是一个常见问题不是这两个类的实例的类型,因此您最终会得到一个通常无法评估的类型良好的表达式。

通常的修复就是使用fromIntegral转换为您定位的常见Num实例。