FP 学习笔记(基于 JS)
Contents
[NOTE] Updated May 25, 2021. This article may have outdated content or subject matter.
Question
$\pi$
$\sum_{n=0}^100n^2$
$\sqrt{a^2+b^2}=c^2$
test latex equation
chain 就是 compose(join,map)
functor: 算子
A functor is a container of type a that, when subjected to a function that maps from a→b, yields a container of type b.我们的 map 函数就是一个算子。
container
一个容器可以放任何东西,甚至是另一个容器.比如我们的数组就是这种容器。
map:
是传入一个 function,把 function 应用到 container 里的值,然后返回这个 container
|
|
Maybe
是一种值可能是 null/undefined 的容器,如果是 null/undefined 时会做特殊处理,比如 map 时就不执行 f,直接返回自己.
|
|
Either
比 Maybe 更 general 的容器,它是两种可能的容器中和一种,左和右(默认右值)。这两个容器有各自的处理逻辑,主要用于做错误处理。Either(string, number)表示这个容器或者是 Left(string)或者是 Right(number).
|
|
IO
IO 是一个里面放了一个函数的容器,这个函数不用是纯函数,IO 是用来封装副作用的。
|
|
Task
Task 是一种 IO,它内部的 func(又叫 fork)有特定的样子(reject, resolve) => {…}
|
|
理论
下面这些是等价的:
|
|
算子互换
2 个 functor 如果可以互换,我们就说他们是 Isomorphic 。因为互换中他们没有信息丢失。 如 Promise 和 Task 就是 Isomorphic
|
|
Natural transformations 是在算子上的函数。
An introduction for FP to Js User
pure function:
- functions
- same input and same output
- replace the value and function
impure world
monad
interpreter pattern
Algebraic Data Type & Monads & Functors
Algebraic Data Type: Either, Reader, Writer, IO, Option Monads: has map and flatMap Functor: functions to convert a value from one strategy to another strategy plethora demystify honed
Author Lin Chen
LastMod 2021-05-25