单子 (函数式编程) 在函数式编程中单子monad是一种抽象它允许以泛型方式构造程序支持它的语言可以使用单子来抽象出程序逻辑需要的样板代码英语boilerplate code为了达成这个目标单子提供它们自己的数据类型每种类型的单子都有特定的类型它表示一种特殊形式计算与之在一起的有两个过程一个过程用来包装单子内任何基本类型的值产生单子值另一个过程用来复合英语function composition computer science那些输出单子值的函数叫做单子函数 单子的概念和术语二者最初都来自范畴论这里的单子被定义为具有额外结构的函子开始于年代晚期和年代早期的研究确立了单子可以将看似完全不同的计算机科学问题置于一个统一的函数式模型之下范畴论还提供了叫做单子定律的一些形式要求任何单子都应当满足它并可以用它来验证单子代码 通过单子编程者可以把复杂的函数序列变成简洁的管道它抽象出了辅助数据管理控制流或副作用单子可以简化范围宽广的问题比如处理潜在未定义值英语undefined value通过Maybe单子或将值保持在一个灵活而形式正确的列表中使用List单子因为单子使得某种计算的语义明确它们还可以用来实现便捷的语言特征一些语言比如Haskell甚至在它们的核心库中为通用单子结构提供预制的定义和常用实例