在函数式编程中，单子（monad）是一种抽象，它允许以泛型方式构造程序。支持它的语言可以使用单子来抽象出程序逻辑需要的。为了达成这个目标，单子提供它们自己的数据类型（每种类型的单子都有特定的类型），它表示一种特殊形式计算，与之在一起的有两个过程，一个过程用来包装单子内“任何”基本类型的值（产生单子值），另一个过程用来那些输出单子值的函数（叫做单子函数）。单子的概念和术语二者最初都来自范畴论，这里的被定义为具有额外结构的函子。开始于1980年代晚期和1990年代早期的研究，确立了单子可以将看似完全不同的计