list monad是given here。另请参阅Spivak的paper here。所以list是一个monad。是不是一杯鸡尾酒?你怎么证明这一点呢?
发布于 2016-05-07 13:04:10
列表类型构造函数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]] (请注意,通过构造,它们都是非空的)。
https://stackoverflow.com/questions/36755044
复制相似问题