Jam*_*ins 24
Monads与纯度无关,只是没有Monads的纯语言几乎完全没用.
用外行人的话来说,Monad只是一组描述如何执行一系列步骤的规则.拥有Monad抽象使您能够定义用于执行内容的DSL.可以构建Monad以智能地处理诸如异常,ATOMIC回滚/提交,重试逻辑,在每个步骤之间休眠等事情.
以下是Monads的一些示例:
https://wiki.haskell.org/Monad#Interesting_monads
我意识到这个列表是针对Haskell的,这是一种纯语言,但不要让你感到困惑.
与普遍的看法相反,你不需要理解类别理论来理解Monad是什么.monad基本上有两件事:(从这篇维基百科文章中解释)
单位函数,定义为(a - > M a),在Haskell中称为"return",用于将值放入Monad的上下文中.
一个绑定操作,定义为(M t - >(t - > M u) - > M u),看起来很可怕但如果仔细观察,这是一个在进程的每一步之间调用的函数,这是你注入了好东西.
根据语言的不同,可能会有更多的东西,但这是它的核心.
虽然OCaml支持大多数语言提供的标准副作用,但这并不包括所有可能的副作用.OCaml没有提供本机支持的许多效果.其中许多效果可以使用Monads进行编码.例如,
使用更复杂的计算表示,例如参数化单子,可以编码甚至更奇特的效果.例如,