![](/img/trans.png)
[英]Can data ord be replaced with only RealFloat in comparing numbers in Haskell?
[英]Floating, Ord and RealFloat in Haskell
我试图找出为什么这不编译
yell :: (Floating a) => a -> [Char]
yell x
| x > 10.0 = "Yelling"
| otherwise = "No Yell"
但是这个
yell :: (Floating a, Ord a) => a -> [Char]
yell x
| x > 10.0 = "Yelling"
| otherwise = "No Yell"
和这个
yell :: (RealFloat a) => a -> [Char]
yell x
| x > 10.0 = "Yelling"
| otherwise = "No Yell"
做编译。
我知道Floating和Ord是类型类,但并不是每个浮动的成员也是Ord的成员? 最后,RealFloat只是Floating和Ord的“内部联接”吗?
但
Floating
每个成员都不是Ord
的成员吗?
显而易见的反例是复数 。 此外,一些提供良好Num
等实例的类型根本不允许相等或不等式比较,因为它们不仅仅表示单个数值,而且例如对某些数字类型的函数结果进行通用抽象。 (这就是为什么Eq
不是Num
的超类,虽然它曾经是。)
最后,
RealFloat
只是Floating
和Ord
的“内部RealFloat
”吗?
虽然Real
, RealFrac
和RealFloat
实际上包含了许多非常具体的便利方法 - 但我认为你可以只用一个(Floating a, Ord a)
约束来实现它们(尽管效率低得多(Floating a, Ord a)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.