iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 22
1
Software Development

Functional Programming in JS系列 第 22

Applicative

Functor 能夠使用神奇的 map 讓 Data Type (Box) 也能接受一般函式
https://ithelp.ithome.com.tw/upload/images/20200922/20106426QfMGdAhjoe.jpg

如果我們把函式也封裝成 Context 呢?
https://ithelp.ithome.com.tw/upload/images/20200922/20106426SMLHTLrgI9.jpg

這時,就需要再定義一種新的運算。它不是像 function 是值與值的運算,也不是 map 是值與 Functor 的運算,而是 Functor 與 Functor 間的運算,這就是 Applicative,也可以說是加強版的 Functor
https://ithelp.ithome.com.tw/upload/images/20200922/20106426GoLhh535pQ.jpg

const NumberBox = fn => ({
  map: x => NumberBox(x => fn(x)),
  ap: other => NumberBox(x => other.map(fn(x)).runWith(x)),
  runWith: x => fn(x)
});

Applicative 內部其實是這樣運作的: 取出 Box 中各自的值,一個是函式,一個是 value;然後用函式處理值之後再封裝成 Data Type。
https://ithelp.ithome.com.tw/upload/images/20200922/20106426BXgr6rN8wG.jpg


如有錯誤或需要改進的地方,拜託跟我說。
我會以最快速度修改,感謝您

Note. 超短的一篇,最近實在是太忙了,希望之後完賽能回來補一下不足的部分

歡迎追蹤我的部落格,除了技術文也會分享一些在矽谷工作的甘苦。


上一篇
Functor 2: 圖解 Box Data Type
下一篇
Functor 3: 程式碼解說篇
系列文
Functional Programming in JS30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

1
一級屠豬士
iT邦大師 1 級 ‧ 2020-09-22 09:16:19

快要接近30天了,要持續加油喔.這時候很容易有撞牆期.
蠻生動有趣的圖說,請問圖是自己畫的?還是有參考文件?

hannahpun iT邦新手 4 級 ‧ 2020-09-22 15:01:51 檢舉

這一系列都是參考 Aditya Bhargava
這個經典圖,會再補充一下圖是自己重畫但都是參考它

都畫的很好耶.

hannahpun iT邦新手 4 級 ‧ 2020-09-22 15:10:53 檢舉

真的耶 撐到 21 天都是庫存已用完 然後生活突然爆忙還是很容易放棄的時刻

0
小碼農米爾
iT邦高手 1 級 ‧ 2020-09-24 20:07:28

完賽後希望能補充 ap 那邊的用法,頭腦有點轉不過來。 /images/emoticon/emoticon06.gif

hannahpun iT邦新手 4 級 ‧ 2020-09-24 21:14:11 檢舉

會的 XD,給我時間就可以

我要留言

立即登入留言