gpt4 book ai didi

haskell - Haskell 中的 float 、Ord 和 RealFloat

转载 作者:行者123 更新时间:2023-12-03 23:51:08 27 4
gpt4 key购买 nike

我试图弄清楚为什么它不能编译

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 是类型类,但不是 Floating 的每个成员也是 Ord 的成员吗?最后,RealFloat 是否只是 Floating 和 Ord 的“内联”?

最佳答案

but isn't every member of Floating also a member of Ord?

明显的反例是complex numbers .此外,一些提供良好 Num 等实例的类型根本不允许相等或不等比较,因为它们代表的不仅仅是单个数值,而是例如某种数字类型的函数结果的通用抽象。 (这就是为什么 Eq 不是 Num 的父类(super class),尽管它曾经是。)

in the end, is RealFloat just a "inner join" of Floating and Ord?

差不多,虽然 RealRealFracRealFloat 实际上包含很多非常具体的便捷方法——但我认为你可以实现它们全部(尽管效率低得多)只有一个 (Floating a, Ord a) 约束。

关于haskell - Haskell 中的 float 、Ord 和 RealFloat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30013627/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com