加载中...

单子(Monad)是函数式编程中的一种抽象结构,由一个类型构造器和两个操作组成:return(把普通值放入上下文)与 bind(常写作 >>=,把上下文中的值传给下一个返回上下文的函数),并需满足左单位元、右单位元与结合律三条定律。
Monad 的本质是把"带上下文的计算"顺序串联起来,上下文可以是可能失败(Maybe/Option)、多结果(List)、可变状态(State)、外部世界交互(IO)等。概念源自范畴论,由 Eugenio Moggi 引入程序语义,Philip Wadler 将其推广到 Haskell 中用于组织 I/O 与副作用。
Haskell 以 IO Monad 在纯语言中表达副作用,并提供 do 语法糖;Scala 的 for 推导、Rust 的 ? 运算符、JavaScript 的 Promise 链式调用都体现了类似的组合思想。
Monad 以抽象难懂著称,催生了大量比喻式教程;但掌握后它提供了统一处理效应、错误与异步的强大框架。

登录 后参与讨论
暂无讨论,来发表第一条评论吧