gpt4 book ai didi

haskell - 理解 Haskell 的 Bool 推导 Ord

转载 作者:行者123 更新时间:2023-12-03 10:35:04 26 4
gpt4 key购买 nike

Learn You a Haskell介绍 Bool类型:
data Bool = False | True deriving (Ord)
不明白比较的原因Bool的。

> False `compare` True
LT
> True `compare` False
GT

如果 Bool 会丢失什么并非源自 Ord ?

最佳答案

Bool形成 bounded lattice * 其中False是底部和True我停下。这个有界格定义了一个(总)排序,其中 False确实严格小于 True . (它们也是这个格子的唯一元素。)

boolean 运算 andor在这个格中,也可以分别看成 meet 和 join。 Meet 找到最大的下界,而 join 找到最小的上界。这意味着 a && False = False与说底部和其他任何东西的下限是底部是一样的,a || True = True与说 top 的上限和任何东西都是 top 是一样的。因此,使用 boolean 值的排序属性的 meet 和 join 等价于您熟悉的 boolean 运算。

您可以使用 minmax在 Haskell 中显示:

False `min` True = False -- this is the greatest lower bound
False && True = False -- so is this

False `max` True = True -- this is the least upper bound
False || True = True -- so is this

这说明可以定义 &&||只是从派生的 Ord实例:
(&&) = min
(||) = max

请注意,这些定义在存在 a different kind of bottom 时是不等价的。因为 (&&)(||)是短路的(当第一个参数是 FalseTrue 时,第二个参数不严格)而 minmax不是。

另外,一个小的修正: deriving子句没有说 Bool “源自” Ord .它指示 GHC 派生类型类 Ord 的实例。对于类型 Bool .

* 更具体地说,一个互补的分配格。更具体地说, boolean algebra .

关于haskell - 理解 Haskell 的 Bool 推导 Ord,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23880626/

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