曾經在接觸 Monad 時,第一次接觸的名詞都會是從 Haskell 而來,畢竟是經典中的經典,就比如 Either
, Maybe
這種常見的 Monad。
但隨著經驗的積累,總是有接觸其他語言的機會,而我也看了像是 Rust、OCaml、F# 等等其他語言對 Monad 實作的差異,不看還好,看了讓我心中有許多疑惑,為什麼 Haskell 要叫做 Either
, Maybe
,在 Rust, OCaml 又叫做 Result
, Option
,這種在結構上無任何區別的東西為何會取不同名稱?
一開始我還認為只是每個語言各自的命名習慣,Option
跟 Maybe
之間可能還會覺得 Haskell 特立獨行,真正讓我困惑的是 Either
, Result
,甚至 OCaml 兩個都有實作。
後來我查到了一個對我而言可信服的說法,Either
的 Right
跟 Left
在意義上有模糊空間,你可以說他是正確與錯誤,你也可以說他是兩條不同方向,而 Result
則更強調正確與錯誤,你就沒有在兩條路徑選擇上使用 Result
的理由。
那實際上我怎麼去使用他們呢,我總結一下我的策略
- 只有實作
Either
就直接用即可 - 只有實作
Result
,如果意圖很明顯就只用來表示正確與錯誤那也直接用就好,最後再來考慮要不要自己額外實作Either
- 兩個都有實作就根據情況來判定