我正在尝试使用 haskell 类,我发现(至少某些)Traversable
数据结构也是Applicative
当您查看 的定义时Traversable
,您会发现它可以使用以下sequenceA
函数定义:
sequenceA :: (Traversable t, Applicative f) => t (f a) -> f (t a)
由于list是Traversable
and 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 个列表的笛卡尔积!
它甚至适用于更多的列表。
这是什么情况?
这个函数的行为背后的直觉是什么?