gpt4 book ai didi

haskell - 为什么 toList (1, 2) == [2]

转载 作者:行者123 更新时间:2023-12-04 13:04:12 24 4
gpt4 key购买 nike

正如问题所说,为什么是 toList (1, 2) == [2] ?

我记得在元组上进行 fmapping 时发生了类似的事情,但我不记得为什么或是否相关。

最佳答案

(1,2)不对应列表 [1,2] .那没有意义:那么 (True, 3.14) 会是什么?对应于?您不能拥有列表 [True, 3.14] ,因为列表只能包含单一类型的元素。 (Haskell 与此处的 Python 不同。)

从任何元组中选择保证单一类型的元素的唯一方法是,只取一个元素。因此toList ,由 Foldable (a,) 生成例如,采用元组 (a,b)并生成列表 [b] .显然总是有一个 b这样一个元组中的元素†。
您原则上可以考虑 (Int, Int)作为元素具有相同类型的特殊情况,因此您可以选择两个而不是一个,但是这种特殊处理将需要一些非常尴尬的类型相等检查。通常,特殊情况处理不是一个好主意。

可以说,最好不要定义 Foldable (a,)完全没有实例,以避免这种令人困惑的行为。再说一次,有时使用 fold 很方便只是摆脱第一个元组元素(例如一些索引)。

†为什么使用 b而不是 a ?有点随意?嗯,不完全。 (a,b)实际上是 (,) a b 的语法糖,因此您可以考虑 (,) a作为仿函数(其元素的类型为 b ),但不能有仿函数 (`(,)`b)其元素的类型为 a .

关于haskell - 为什么 toList (1, 2) == [2],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36113469/

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