單子列表是given here。另見斯皮瓦克的paper here。所以列表是一個monad。它是一個共同的嗎?你會如何證明這一點?列出monad和comonad?
0
A
回答
1
列表類型構造函數a ↦ μ L. 1 + a * L
不承認一個comonad結構。回想一下,如果它是一個comonad,我們會(使用Haskell的Functor
和Comonad
類型類的名稱)
fmap :: ∀ a b. (a → b) → [a] → [b]
extract :: ∀ a. [a] → a
duplicate :: ∀ a. [a] → [[a]]
然而,有甚至沒有進入任何所需的法律,extract
無法實施,因爲它的輸入可能空的名單,沒有辦法拿出一個a
。
的非空列表類型構造a ↦ μ NE. a + a * NE
確實承認一個comonad結構,具有extract
返回第一元件,和duplicate
映射[x, y, ..., z]
到[[x], [x, y], ..., [x, y, ..., z]]
(注意,每個都是由結構非空)。
+1
這個「重複」幾乎不服從任何聯合法則。正確的(不是唯一的)就像'[x0..xn] - > [[x0..xn],[x1..xn,x0] .. [xn,x0..xn-1]] '。 – mnish
相關問題
- 1. NonEmpty不是Comonad?
- 2. Arrowization the store comonad
- 3. 精明的comonad總結。 (如果monad是「不純的計算類型」)
- 4. Comonad複製功能
- 5. State monad和gtk2hs
- 6. 合理的Comonad實現
- 7. Scala中的Comonad示例
- 8. 什麼是商店comonad?
- 9. 退出狀態Monad循環
- 10. 列表monad變壓器
- 11. 在IO monad中使用monad
- 12. IO和Maybe monad的互動
- 13. Snap Monad,LiftIO和ghc 7.4.1
- 14. 貓效應和IO monad
- 15. 綁定和monad堆棧
- 16. 短路和在IO Monad
- 17. Coq證明選擇monad是應用程序和monad
- 18. cofree comonad的不可摺疊實例
- 19. Haskell State Monad和Binary不會輸出所有東西
- 20. 堆棧空間溢出與ST monad
- 21. 將Rand monad帶出`data`構造?
- 22. 如何在Web monad中「早日退出」
- 23. monad在monad變壓器上下文
- 24. Markup monad如何與Html monad關聯?
- 25. 帶有標識monad的Monad變壓器
- 26. State Monad,序列的隨機數和一元代碼
- 27. 如何在Haskell中組合列表和狀態Monad
- 28. 如何幹淨地轉換列表和ListT monad變換器?
- 29. Haskell State Monad
- 30. instance Monoid Monad
您無法爲有限列表定義提取'[a] - > a'。 – Lee