【发布时间】:2021-04-27 09:24:18
【问题描述】:
我正在尝试使用 haskell 类,我发现(至少有一些)Traversable 数据结构也是Applicative
当您查看Traversable 的定义时,您会发现它可以使用sequenceA 函数来定义:
sequenceA :: (Traversable t, Applicative f) => t (f a) -> f (t a)
并且由于 list 既是 Traversable 和 Applicative,我确实尝试在列表列表中使用 sequenceA:
-- this thing ...
sequenceA [[0, 1], [7, 8, 9]]
-- is evaluated as [[0,7],[0,8],[0,9],[1,7],[1,8],[1,9]]
我得到了 2 个列表的笛卡尔积!
它甚至适用于更多的列表。
这是怎么回事?
这个函数的行为背后的直觉是什么?
【问题讨论】:
-
@danidiaz 不错!对我来说,这看起来像是一个完全直接的完全相同的副本。
-
@DanielWagner 另一个问题的标题信息量较少,因为“const”与实际发生的事情完全无关。
-
@danidiaz 没关系。 StackOverflow 的立场是,导致相同答案的问题是重复的,即使问题本身在表面上看起来不同。
标签: list haskell cartesian-product traversable