我一直在閱讀如何在C#中實現monad。在更多類似Haskell的實現中,例如here中使用的類型使用稱爲Just
的類型來包裝除「Nothing
」之外的結果。這種類型只是一種便利嗎?我們不必在我們的代碼中隨處說出Maybe
,或者它有其他一些我不理解的屬性? Eric Lippert的implementation不使用稱爲Just
的類型,而是例如返回Tainted<R>
。也許monad什麼是正義?
2
A
回答
2
儘管在C#中聲明瞭Just
作爲一個類,但它在技術上不是一種類型。在Haskell的說法中,Just
被稱爲數據構造函數;它會創建類型爲Maybe
的數據。同樣,Nothing
也是一個數據構造函數。
在Haskell中,Maybe
被用作簡單的錯誤處理機制。 Just
表示包裝的值是操作的結果,而Nothing
表示某種錯誤。作爲一個基本的例子,Haskell有具有以下簽名(1)的函數:
lookup :: [(key, value)] -> key -> Maybe value
此lookup
函數接受的(鍵,值)對和密鑰列表並返回包裹在Maybe
的值。如果密鑰存在,則關聯值將被包裝在Just
中,否則返回Nothing
。
(1)我故意遺漏了與本次討論無關的細節。
Tainted
來自Eric Lippert的文章看起來像是Monad
的另一個例子,但與monad完全不同。我不認爲它比單子模式的相似性更有用。
相關問題
- 1. 也許monad使用表達式樹?
- 2. 動態關鍵字啓用「也許」monad?
- 3. 什麼是Haskell`( - >)a` monad?
- 4. 爲什麼不是`Monad`類
- 5. Scala IO monad:有什麼意義?
- 6. [Smarty,也許教義]
- 7. State Monad,爲什麼不是元組?
- 8. 爲什麼Monad的排序是Set1?
- 9. 閱讀器Monad的目的是什麼?
- 10. Haskell稱之爲Hom Functor/Monad是什麼?
- 11. monad命名約定是什麼?
- 12. 正式調用monad綁定操作的參數是什麼?
- 13. 寫一個序列 - 也許monad使用clojure.algo.monads
- 14. 無法找出這是什麼問題循環也array_filter也許很有趣
- 15. 轉義正是在javascript中是什麼
- 16. mysql真正的轉義字符串什麼也沒有返回
- 17. 爲什麼我們需要可能Monad在任一Monad
- 18. 自定義CursorAdaptor什麼也沒有
- 19. 也許編碼是壞人?
- 20. 也許是退出fold
- 21. 「Shadow DOM」的正確含義是什麼?
- 22. LIFO的真正含義是什麼?
- 23. 什麼是endianess的正確定義?
- 24. git checkout的真正含義是什麼?
- 25. 「malloc_trim(0)」的真正含義是什麼?
- 26. 什麼是抽象的真正定義?
- 27. '正式定義'是什麼意思?
- 28. CATEGORY_BROWSABLE的真正含義是什麼?
- 29. EnumSet的真正含義是什麼?
- 30. 「application/json」的真正含義是什麼
我相信'Tainted'的例子與'Maybe'例子不同。 – 2014-08-31 03:26:45
我發現這種實現(使用接口和類有點missleading - 更多1:1實現是恕我直言,像這樣:https://github.com/CarstenKoenig/DWX2014/blob/master/Monads/Monaden%20Solution/ Monaden.CSharp/Maybe/Maybe.cs(如果你錯過了'return' - 它只是'Some' - 這是爲了演示如何實現LINQ語法特性並將其與F#/ Haskell進行比較,所以我可能會有一些不幸的混合名稱(一些vs只是)(也許vs選項)在那裏:( – Carsten 2014-08-31 08:49:41