为什么在列表列表中应用`sequence`会导致其笛卡尔积的计算?
我的问题是关于
Prelude
中的sequence
函数,其签名如下:
sequence :: Monad m => [m a] -> m [a]
我理解这个功能如何适用于List
的Maybe
s。例如,在[Just 3, Just 9]
上应用sequence
给出Just [3, 9]
。
我注意到在List
的List
s上应用sequence
给出了它的笛卡尔积。有人可以帮我理解这是怎么回事?
没有找到相关结果
已邀请:
3 个回复
董碘奴星
根据定义,这与以下相同:
只需将其读作“首先选择1和2之间,然后选择3到4”。列表monad现在将累积所有可能的结果 - 因此答案
。 (对于一个更加模糊的例子,请看这里)
杭难插
就好像是这样定义的。
(或者
但无论如何......) 试想一下应用于列表列表时会发生什么。
提孺局缎
应用于列表列表时,序列的类型将专门用于
to(类型构造函数m设置为[])
(与
相同) 在内部,序列使用(>> =) - 即monadic绑定函数。对于列表,这个绑定函数的实现完全不同于m设置为Maybe!