2016-04-20 68 views

回答

1

列表類型構造函數a ↦ μ L. 1 + a * L不承認一個comonad結構。回想一下,如果它是一個comonad,我們會(使用Haskell的FunctorComonad類型類的名稱)

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