大部分的Monad教程都錯了

閱讀時間約 3 分鐘

學習 Functional Programming 時的第一個難關就是 Monad

一般的教程都是把回傳 Monad 的函式解釋成「帶有 side effect 的函式」

然而我認為這是不合適的詮釋

也不會幫助初學者理解 (至少對我來說就是如此)

例如 List Monad 常被解釋成有多種可能的結果的 Monad

所以它的 side effect 是「多種可能的結果」?

這樣描述只會讓初學者更不懂


在更進一步討論之前

我們得先釐清何謂 side effect

這個詞主要是描述相對於 pure function 的概念

pure function 不允許在運算時對環境造成影響或被環境影響

傳入相同的參數就應該得到相同的結果

因此改變運算順序不會影響輸出結果

反之帶有 side effect 的函式指的就是會對環境造成影響的函式

例如 print(message), setValue(value), toggle(checkbox) 這類的函式

或者更應該稱呼其為「程序」

因為他們做的不只是做某種計算, 還會執行某種操作

不如說執行某種操作才是這些函式的主要目的

因此改變順序可能會造成未預期的結果

pure function 和 side effect 描述的就是這種差異


所以用這種 side effect 的概念對 Monad 的詮釋是否合適?

IO Monad 可以理解成會「輸入輸出到外部終端」的函式

它可以藉由跟外界互動做出不同的行為

因此非常適合用 side effect 詮釋

State Monad 可以理解成會「改變狀態」的函式

根據狀態會有不同的結果

因此也非常適合用 side effect 詮釋

Maybe Monad 則可以理解成「可能會失敗」的函式

這部份比較奇怪

畢竟函式失敗了就不會有回傳值了

但「可能會失敗」好像也可以說是一種 effect:

它似乎是一種可以拋出例外的程序

List Monad 就更迷了

若是把它理解成「有多種可能結果」的函式

它是一種執行什麼操作的程序?

什麼樣的操作會產生多種結果? 量子疊加? 多重宇宙?


上面對 side effect 的定義有一個重要的特性: linearity

帶有 side effect 的函式不應改變輸出結果的型別和乘數

它會輸出什麼樣的東西不應受到 side effect 的影響

我們一般不會預期一個「帶有某些效果的函式」的輸出結果與其宣告不同

因此 Maybe Monad, List Monad 不應用 side effect 詮釋

他們不是造成某些效果, 而是直接影響 control flow 的結構

我們會認為 Maybe Monad 用 side effect 詮釋說的通

是因為我們已經習慣 try catch 例外處理的 pattern

try catch 本身就是非常奇怪的語言特性, 不應把它當作理所當然


帶有 side effect 的函式的確是一種 Monad

然而用 side effect 的概念囊括所有的 Monad 就有點牽強

事實上 Monad function 只是一個數學結構

描述的是所有行為像 function 的東西

硬要給所有這類東西安上一個統一的直觀概念就很奇怪

與其用統一的方式去理解所有 Monad

不如單獨理解每個 Monad 的語意

或是好好地從數學結構去理解 Monad

avatar-img
4會員
28內容數
這不是教你如何從物件導向到函數式編程的入門教程。我會深入探討物件導向與函數式編程的差異,並討論為什麼你應該使用函數式編程並徹底放棄物件導向。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
have bear的沙龍 的其他內容
'方格子在 linux/firefox 上的 bug 超煩 '若在每行第一句打中文會被吃掉 'Ctrl+V還會複製貼上之後的文字貼上之後的文字
'方格子在 linux/firefox 上的 bug 超煩 '若在每行第一句打中文會被吃掉 'Ctrl+V還會複製貼上之後的文字貼上之後的文字
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
今天要談的內容,主要是我一直在想,目前在用筆電的時候,喝完的容器,一直在堆的原因。 我想,對我而言,大部分的情況,以區別緊急和重要,我反而覺得沒有在乎。 沒有在乎的原因? 真的要說,主要是因為我覺得,完全沒有任何的動機,引起我去進行喝完立刻處理的事實。 甚至,這有規定嗎? 我想,也有星星兒
Thumbnail
為了解決一個問題,你買一個產品。這個產品甚至在你打開它之前就解決了你頭腦中的問題,就因為你買了它。
普通來說,都一致認為自閉症者聽不懂話中有話、雙關語等,這類詞。 因此,事實上,極少數的自閉症者,是沒有經過解釋,就聽得懂。 因此,在進入職場之前,能協助自閉症者用谷歌,就務必用。 用谷歌找話中有話、雙關語等的詞 事實上,用谷歌找,就用不著討論。 因為,家長遲早離開人世,加上懂得有限,因此,上谷歌就有
Thumbnail
你總是用陳述自己經歷的方式在寫你的履歷表嗎? 你總是想說,我只要把我的做了多少豐功偉業寫出來,你就符合雇主的用人需求了嗎? 我個人認為並不盡然如此喔,所以以下文章就是要告訴你,寫履歷表之前必知的2大關鍵點!!
Thumbnail
在國外非常吃香的通才,為什麼在台灣都失敗呢? 像我們這種白手起家的小孩 , 身旁的前輩跟朋友就會是我們的老師 想想很有趣 , 想當初我剛出社會時 , 很多同學跟朋友都混得不錯 , 開雙B買房又買車 , 於是我就去跟他們請教“如何賺大錢” , 這些市場老師們總會說 , 年輕人不要挑 , 有錢就去賺!!
Thumbnail
#你會怎麼選? 當我們開始做企業內訓時 , 發現幾個很有趣的現象 我們發現了---很多高階主管懂的東西比老闆還多 , 處理事情的能力比老闆還要強太多 , 為人處世比老闆圓滑太多...等 我為何要一直用『太多』 , 因為實際上真的多很多!! 這件事情很有趣 , 我們把時間推回古代 , 先不說帶天命的帝
Thumbnail
2021/06/01 最後的急漲,時常是氣力放盡的最後一擊 最後的急跌,時常是絕望至極的痛苦解脫 當你看著行情跑動很快,沒有注意距離的時候 就會掉進因為速度,而讓視野變窄的陷阱裡
Thumbnail
《每日新聞》採訪村上春樹時,他表示:「我在做煩惱諮詢時,大半都會建議大家說,『請養貓』。大部分的煩惱只要養貓就會好。」 「人與人之間,和貓與人之間的關係,究竟有什麼不同?」 且聽綺忻娓娓道來,看完讓你也忍不住想有隻貓貓陪伴! (友善提醒:貓貓需要不少時間陪伴跟金錢照顧,不要衝動飼養哦!)
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
今天要談的內容,主要是我一直在想,目前在用筆電的時候,喝完的容器,一直在堆的原因。 我想,對我而言,大部分的情況,以區別緊急和重要,我反而覺得沒有在乎。 沒有在乎的原因? 真的要說,主要是因為我覺得,完全沒有任何的動機,引起我去進行喝完立刻處理的事實。 甚至,這有規定嗎? 我想,也有星星兒
Thumbnail
為了解決一個問題,你買一個產品。這個產品甚至在你打開它之前就解決了你頭腦中的問題,就因為你買了它。
普通來說,都一致認為自閉症者聽不懂話中有話、雙關語等,這類詞。 因此,事實上,極少數的自閉症者,是沒有經過解釋,就聽得懂。 因此,在進入職場之前,能協助自閉症者用谷歌,就務必用。 用谷歌找話中有話、雙關語等的詞 事實上,用谷歌找,就用不著討論。 因為,家長遲早離開人世,加上懂得有限,因此,上谷歌就有
Thumbnail
你總是用陳述自己經歷的方式在寫你的履歷表嗎? 你總是想說,我只要把我的做了多少豐功偉業寫出來,你就符合雇主的用人需求了嗎? 我個人認為並不盡然如此喔,所以以下文章就是要告訴你,寫履歷表之前必知的2大關鍵點!!
Thumbnail
在國外非常吃香的通才,為什麼在台灣都失敗呢? 像我們這種白手起家的小孩 , 身旁的前輩跟朋友就會是我們的老師 想想很有趣 , 想當初我剛出社會時 , 很多同學跟朋友都混得不錯 , 開雙B買房又買車 , 於是我就去跟他們請教“如何賺大錢” , 這些市場老師們總會說 , 年輕人不要挑 , 有錢就去賺!!
Thumbnail
#你會怎麼選? 當我們開始做企業內訓時 , 發現幾個很有趣的現象 我們發現了---很多高階主管懂的東西比老闆還多 , 處理事情的能力比老闆還要強太多 , 為人處世比老闆圓滑太多...等 我為何要一直用『太多』 , 因為實際上真的多很多!! 這件事情很有趣 , 我們把時間推回古代 , 先不說帶天命的帝
Thumbnail
2021/06/01 最後的急漲,時常是氣力放盡的最後一擊 最後的急跌,時常是絕望至極的痛苦解脫 當你看著行情跑動很快,沒有注意距離的時候 就會掉進因為速度,而讓視野變窄的陷阱裡
Thumbnail
《每日新聞》採訪村上春樹時,他表示:「我在做煩惱諮詢時,大半都會建議大家說,『請養貓』。大部分的煩惱只要養貓就會好。」 「人與人之間,和貓與人之間的關係,究竟有什麼不同?」 且聽綺忻娓娓道來,看完讓你也忍不住想有隻貓貓陪伴! (友善提醒:貓貓需要不少時間陪伴跟金錢照顧,不要衝動飼養哦!)