曾經在接觸 Monad 時,第一次接觸的名詞都會是從 Haskell 而來,畢竟是經典中的經典,就比如 Either, Maybe 這種常見的 Monad。

但隨著經驗的積累,總是有接觸其他語言的機會,而我也看了像是 Rust、OCaml、F# 等等其他語言對 Monad 實作的差異,不看還好,看了讓我心中有許多疑惑,為什麼 Haskell 要叫做 Either, Maybe,在 Rust, OCaml 又叫做 Result, Option,這種在結構上無任何區別的東西為何會取不同名稱?

一開始我還認為只是每個語言各自的命名習慣,OptionMaybe 之間可能還會覺得 Haskell 特立獨行,真正讓我困惑的是 Either, Result,甚至 OCaml 兩個都有實作。

後來我查到了一個對我而言可信服的說法,EitherRightLeft 在意義上有模糊空間,你可以說他是正確與錯誤,你也可以說他是兩條不同方向,而 Result 則更強調正確與錯誤,你就沒有在兩條路徑選擇上使用 Result 的理由。

那實際上我怎麼去使用他們呢,我總結一下我的策略

  • 只有實作 Either 就直接用即可
  • 只有實作 Result ,如果意圖很明顯就只用來表示正確與錯誤那也直接用就好,最後再來考慮要不要自己額外實作 Either
  • 兩個都有實作就根據情況來判定