點燈坊

失くすものさえない今が強くなるチャンスよ

四種改變 Monadic Value 方法

Sam Xiao's Avatar 2021-07-25

Monad 內的 Value 稱為 Monadic Value,可用 4 種方法改變之。

Version

Sanctuary 3.1.0

map

import { Just, map, add } from 'sanctuary'

let data = Just (1)

let f = add (1)

map (f) (data) // ?

data 為 Monad,我們希望提供 f 改變 data

f 為一般 function,可直接傳入 map 改變 Monadic Value。

change000

chain

import { compose, Just, chain, add } from 'sanctuary'

let data = Just (1)

let f = compose (Just) (add (1))

chain (f) (data) // ?

f 是回傳 Monad 的 function,可傳入 chain 改變 Monadic Value。

change001

ap

import { Just, ap, add } from 'sanctuary'

let data = Just (1)

let f = Just (add (1))

ap (f) (data) // ?

f 會回傳 Monad,但會將 function 包進 Monad 內,可傳入 ap 改變 Monadic Value。

change002

lift2

import { Just, lift2, add } from 'sanctuary'

let data = Just (1)

let f = lift2 (add)

f (Just (1)) (data) // ?

f 為接受 Monad 與回傳 Monad 的 function,可直接傳入 Monad 改變 Monadic Value。

change003

Conclusion

  • 4 種方法各有它適用場合,但都可改變 Monadic Value