我没有一种与语言无关的方式来表达问题,但 monad 的官方™定义表明绑定操作采用了一个本身返回monad实例的函数。
然而,在现实世界中,我拥有“monad”的所有方便示例,绑定函数返回基础类型的值,monad然后将其包装。
差异是(如果我没有完全丢失)与Scala集合中flatMap()
和map()
之间的差异相同。
我找到的消息来源
map()
是flatMap()
的可接受的简写。flatMap()
,则它不是monad。map()
,则为延续。显然,我需要一个权威的答案。
顺便说一句,如果它是(1),monad的世界是巨大的 - 几乎每种语言的每个容器类都有。如果是(2),那么我见过的所有单子都是故意单子。