美文网首页
Swift函数式编程十三(函子、适用函子、单子)

Swift函数式编程十三(函子、适用函子、单子)

作者: 酒茶白开水 | 来源:发表于2022-06-01 09:55 被阅读0次

解释一些函数式编程中的专用术语和一些常⻅模式,比如函子 (Functor)、适用函子 (Applicative Functor) 和单子 (Monad) 等。理解这些常⻅的模式,会有助于设计自己 的数据类型,并为 API 选择更合适的函数。

函子

目前已经遇到了几个被命名为 map 的方法,类型分别如下:

extension Array {
func map<R>(transform: (Element) -> R) -> [R]
}
extension Optional {
func map<R>(transform: (Wrapped) -> R) -> R? }
extension Parser {
func map<T>(_ transform: @escaping (Result) -> T) -> Parser<T>
}

每个 map 方法都需要两个参数:一个即将被映射的数据结构,和一个类型为 (T) -> U 的函数 transform。对于数组或可选值参数中所有类型为 T 的值,map 方法会使用 transform 将它们转换为 U。这种支持 map 运算的类型构造体 —— 比如可选值或数组 —— 有时候也被称作函子 (Functor)。

函子也会被描述为一个储存特定类型值的 “容器”。而 map 方法则用来对储存在容器中的值进行转换。

适用函子

除了 map ,许多函子还支持其它的运算。

对于任意的类型构造体,如果可以为其 定义恰当的 pure 与 <*> 运算,就可以将其称之为一个适用函子 (Applicative Functor)。或 者再严谨一些,对任意一个函子 F,如果能支持以下运算,该函子就是一个适用函子:

func pure<A>(_ value: A) -> F<A>
func <*><A, B>(f: F<A -> B>, x: F<A>) -> F<B>

单子

如果一个类型构造体 F 定义了下面两个函数,它就是一个单子 (Monad):

func pure<A>(_ value: A) -> F<A>
func flatMap<A, B>(_ f: (A) -> F<B>) -> F<B>

相关文章

  • Swift函数式编程十三(函子、适用函子、单子)

    解释一些函数式编程中的专用术语和一些常⻅模式,比如函子 (Functor)、适用函子 (Applicative F...

  • 函数式编程——Functor、Applicative、Monad

    原文链接 了解函数式编程的同学可能或多或少都听说过 函子(Functor)、适用函子(Applicative)、单...

  • Functor函子

    为什么学习函子? 函子是函数式编程里面最重要的数据类型,也是基本的运算单位和功能单位 函子作用:控制函数式编程中的...

  • 函子与单子--从范畴论到编程

    作为一名计算机工作者,理解范畴论中的函子与单子的目的,还是为了更好的理解函数式编程中的函子与单子,对于我来说,没有...

  • JS函数式编程03--函子

    函子 函子的概念 函子是函数式编程里面最重要的数据类型,也是基本的运算单位和功能单位。函子首先是一个容器,它包含了...

  • 函子的概念

    一、函子 为什么要学习函子? 到目前为止已经学习了函数式编程的一些基础,但是我们还没有演示在函数式编程中如何把副作...

  • 函数式编程(四)

    函子(Functor) 函子的作用,在函数式编程中如何把副作用控制在可控的范围内、异常处理、异步操作等。 什么是 ...

  • 函数式编程概念总结

    函数式编程 对应于 命令式编程诞生。 函数式编程 强调数据流。强调计算什么,而不是怎么计算。 就是从函子(容器)传...

  • 函数式编程小思考4.2 笔记

    函数式编程小思考4 笔记JS函数式编程指南Data.Task 函子 源码 补充两个内容 用得到的curry函数 文...

  • 函数式编程 - 酷炫Applicative(应用函子) [Swi

    引言 Applicative functor(应用函子),简称Applicative,作为函数式编程里面一个比较重...

网友评论

      本文标题:Swift函数式编程十三(函子、适用函子、单子)

      本文链接:https://www.haomeiwen.com/subject/mwqxmrtx.html