2016-05-30 22 views
0

Iはdiv中置オペレータとGHCiの中/オペレータのタイプを照会する場合、私は/署名(/) Fractional a => a -> a -> aを有しているdiv署名(div) :: Integral a => a -> a -> aを有していることを見つけます。彼らはほとんど同じことを達成しますが、タイプクラスFractionalIntegralの違いは何ですか?ハスケル型クラス - divと/?の違い

+3

彼らは全く同じことをしません - 'div'は剰余を持つ除算であり、'/'は...分数分数がよく分かります - ' 5/2 = 2.5'と考える '5''div' 2 = 2 - あなたは違いを見ることができますか? - クラス間の違いはちょうどそれです - 'Integral'は残余で除算を行うことのできる数を表し、分数は合理的な数を表します(' a/b') – Carsten

+0

今私は参照してください..ありがとう:-) –

+0

@ Carsten:より良い視認性のための答えとしてそれを投稿できますか?ありがとう! –

答えて

4

これらの操作の間に概念的な違いがあります:

  • divは、残りの分割である(euclidean domain参照)
  • (/)が分数分周である - これは(*)
動作であります

と思う。5/2 = 2.55 `div` 2 = 2

クラスの違いは

  • Integralあなたは
  • Fractionalで残りの分割を行うことができます数字ですがa/bの形で合理的のような数字のためにあるだけのことである - 1/2考えますまたは2/7など

あなたはFractionalとの両方を混在させる場合は確かに、これは共通の問題ですのような操作は、div(/)のように、preludeのいずれのインスタンスでもないので、よく評価できない型付きの式になります。

通常フィックスは、fromIntegralを使用して、ターゲットとする共通のNumインスタンスに変換します。