大部分的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

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