阅读Control.Monad的文档,我发现了mapM的这种描述:
将结构的每个元素映射到monadic动作,从左到右评估这些动作,并收集结果
我很感兴趣,“结构元素”对于任意单子意味着什么?例如,State
或IO
monad?什么结构?
我知道mapM
函数在mapM
的描述中对这些特定单词的语义中的函数做了什么以及更有趣。这是"结构"以某种方式与代数结构的概念相关联#34;?
结构是一个集合,其上定义了一个或多个有限公理运算,满足公理列表。
如果是,那么这个结构(载体集)的元素是什么,正如我所要求的那样。 IO monad?一般来说?
答案 0 :(得分:8)
"结构元素"对任意monad来说都没有任何意义,因为它没有引用monad。您引用的mapM
是Traversable
类型类的成员,它引用的结构是Traversable
。 Traversable
是可以映射的数据结构,例如列表或树。 "结构元素"是指列表的元素。
答案 1 :(得分:4)
这里的'结构'是Traversable
类的实例(即t
签名中的类型构造函数mapM
。