Haskell类型类-div和/?
当我查询Ghci中Haskell类型类-div和/?,haskell,read-eval-print-loop,Haskell,Read Eval Print Loop,当我查询Ghci中div中缀运算符和/运算符的类型时,我发现div具有签名(div)::积分a=>a->a,而/具有签名(/)分数a=>a->a。虽然它们完成了几乎相同的事情,但类型类分数和积分之间有什么区别?这些操作在概念上有区别: div是带余数的除法(请参阅) (/)是分数除法-这是对(*) 思考5/2=2.5vs5`div`2=2 这两个类之间的区别只是 Integral用于数字,您可以使用 而分数是以a/b的形式表示类似有理数的数字-想想1/2或2/7,等等 实际上,如果将分数
div
中缀运算符和/
运算符的类型时,我发现div
具有签名(div)::积分a=>a->a
,而/
具有签名(/)分数a=>a->a
。虽然它们完成了几乎相同的事情,但类型类分数和积分之间有什么区别?这些操作在概念上有区别:
div
是带余数的除法(请参阅)
(/)
是分数除法-这是对(*)
思考5/2=2.5
vs5`div`2=2
这两个类之间的区别只是
Integral
用于数字,您可以使用
- 而
分数
是以a/b
的形式表示类似有理数的数字-想想1/2
或2/7
,等等
实际上,如果将分数
和积分
操作(如div
和(/)
)混合在一起,这是一个常见的问题,因为就在前奏曲中,没有类型是这两个类的实例,因此最终会得到一个通常无法计算的类型良好的表达式
通常的解决方法是使用frompintegral
将其转换为您所针对的通用Num
实例。这些操作在概念上存在差异:
div
是带余数的除法(请参阅)
(/)
是分数除法-这是对(*)
思考5/2=2.5
vs5`div`2=2
这两个类之间的区别只是
Integral
用于数字,您可以使用
- 而
分数
是以a/b
的形式表示类似有理数的数字-想想1/2
或2/7
,等等
实际上,如果将分数
和积分
操作(如div
和(/)
)混合在一起,这是一个常见的问题,因为就在前奏曲中,没有类型是这两个类的实例,因此最终会得到一个通常无法计算的类型良好的表达式
通常的解决方法是使用from integral
将其转换为您目标的通用Num
实例。它们根本不做相同的事情-div
是带余数的除法,/
是。。。好的,分数除法-想想5/2=2.5
vs5`div`2=2
-你能看出区别吗这两个类之间的区别在于-Integral
适用于可以用余数除法的数字,而分数适用于有理数(a/b
)。。谢谢:-)@Carsten:你能把这个作为一个更好的可视性的答案吗?谢谢它们根本不做相同的事情-div
是用余数除法,/
是。。。好的,分数除法-想想5/2=2.5
vs5`div`2=2
-你能看出区别吗这两个类之间的区别在于-Integral
适用于可以用余数除法的数字,而分数适用于有理数(a/b
)。。谢谢:-)@Carsten:你能把这个作为一个更好的可视性的答案吗?谢谢