# Functional Programming 筆記 ## Library - [Ramda](https://www.npmjs.com/package/ramda) - [fp-ts](https://www.npmjs.com/package/fp-ts) ## 值 vs Functor ^ f ^ g ^ composition ^ | pure | pure | compose(f, g) | | effects | pure(unary) | f.map(g) | | effects | pure(n-ary) | f1.map(g).ap(f2) | | effects | effects | m.chain(f).chain(g) | ## Functor ^ ADT ^ Effect ^ | Either | 處理錯誤情境 | | Future | #TODO | | Identity | #TODO | | IO | 處理永不失敗的同步計算 | | Maybe | 處理無值情境 | | Reader | #TODO | | Tuple | #TODO | | State | #TODO | ### Either * 處理錯誤情境 * 分成 `Either.Right` 和 `Either.Left` * `Either.Right` 會繼續跑,而 `Either.Left` 則會忽略後續運算,執意將手上的值傳下去 * ```javascript const addOne = num => Right(R.add(1)); const error = () => Left(new Error('error')) Right(10) .chain(addOne) .map(R.add(2)) .inspect() // Right(13) Right(10) .chain(error) .map(R.add(2)) .inspect() // Left(Error: error) ``` ### Future > TODO ### Identity > TODO ### IO * 處理永不失敗的同步計算 * ### Maybe * 處理無值情境 ( null || undefined ) * ### Reader * 用來避免中間傳送無用的 `dep` * ### Tuple > TODO ### State * ## Articles - - - -