单子 (函数式编程)
函數式編程中,用作構造通用類型的設計模式 / 維基百科,自由的 encyclopedia
親愛的 Wikiwand AI, 讓我們通過簡單地回答這些關鍵問題來保持簡短:
你能列出最重要的事實和統計數據嗎 单子 (函数式编程)?
為 10 歲的孩子總結這篇文章
顯示所有問題
在函数式编程中,单子(monad)是一种抽象,它允许以泛型方式构造程序。支持它的语言可以使用单子来抽象出程序逻辑需要的样板代码(英语:boilerplate code)。为了达成这个目标,单子提供它们自己的数据类型(每种类型的单子都有特定的类型),它表示一种特殊形式计算,与之在一起的有两个过程,一个过程用来包装单子内“任何”基本类型的值(产生单子值),另一个过程用来复合(英语:function composition (computer science))那些输出单子值的函数(叫做单子函数)[1]。
单子的概念和术语二者最初都来自范畴论,这里的单子被定义为具有额外结构的函子[a]。开始于1980年代晚期和1990年代早期的研究,确立了单子可以将看似完全不同的计算机科学问题置于一个统一的函数式模型之下。范畴论还提供了叫做单子定律的一些形式要求,任何单子都应当满足它并可以用它来验证单子代码[2][3]。
通过单子,编程者可以把复杂的函数序列变成简洁的管道,它抽象出了辅助数据管理、控制流或副作用[1][4]。单子可以简化范围宽广的问题,比如处理潜在未定义值(英语:undefined value)(通过Maybe
单子),或将值保持在一个灵活而形式正确的列表中(使用List
单子)。因为单子使得某种计算的语义明确,它们还可以用来实现便捷的语言特征。一些语言比如Haskell,甚至在它们的核心库中为通用单子结构提供预制的定义和常用实例[1][5]。