问问题
239 次
1 回答
1
列表类型构造函数a ↦ μ L. 1 + a * L
不接受共单结构。回想一下,如果它是一个comonad,我们会有(使用来自HaskellFunctor
和类型类的名称Comonad
)
fmap :: ∀ a b. (a → b) → [a] → [b]
extract :: ∀ a. [a] → a
duplicate :: ∀ a. [a] → [[a]]
但是,即使没有进入任何必要的法律,extract
也无法实施,因为它的输入可能是空列表,无法提供a
.
非空列表类型构造函数a ↦ μ NE. a + a * NE
确实允许一个共单结构,extract
返回第一个元素,并duplicate
映射[x, y, ..., z]
到[[x], [x, y], ..., [x, y, ..., z]]
(请注意,它们中的每一个在构造上都是非空的)。
于 2016-05-07T05:04:09.803 回答