令为CCC。设为的乘积双函子。由于Cat是CCC,因此我们可以咖喱:
函子范畴具有通常monoidal结构。 所述的半群处于单子。 我们将有限积视为上的单调结构。
因此保留了单曲面结构,因此将一个单面体传输到单子,而将共形子传输到共体。即,它将一个任意的等分面词传输到 monad(请看定义— 必须是一个等分词)。类似地,它将对角线类彗星传输到Coreader comonad。
现在,为具体起见,我将介绍Writer的构造。
开始。实际上,它们简单地具有在Haskell不同的名称。我们有一个Haskell的幺⟨ 瓦特,中号一个p p ë Ñ d ,米ê 米p 吨ÿ ⟩:
作家是一个仿函数,所以它也必须映射的态射,如和米Ë 米p 吨ÿ。我写如下,尽管在Haskell中无效:
是自然变换,在一个态射 Ç ⇒ Ç。通过的性质 Ç ù - [R [R ý (× )是一个函数,它接受一个∈ Ô b (C ^ ),并给出在一个态射 Ç:
非正式地,类型的总和分量瓦特和泵一个完好。这正是Haskell中Writer的定义。一个障碍是,单子⟨ w ^ [R 我牛逼è [R w ^ ,μ ,η ⟩我们需要
即类型不兼容。但是,这些函子是同构的:由通常的关联器用于有限的产品,其是一种天然的同构≅ λ 一个。瓦特× (瓦特× 一)= w ^ - [R 我吨Ë ř 瓦特∘ W¯¯ ř 我吨Ë ř 瓦特。然后,我们定义经由W¯¯ ř 我吨Ë ř 米一个p p ê Ñ d。我省略的构造的η经由米Ë 米p 吨ÿ。
作家,作为一个算符,保存交换图表,即,蜜饯幺半等式,所以我们有理所当然证明等式 =幺半群中(Ç ⇒ C ^ ) =一个单子在Ç。结束。
怎么样阅读器和Cowriter?如Coreader的定义中所述,Reader与Coreader相连,请参见上面的链接。同样,Cowriter与Writer相邻。我没有找到Cowriter的定义,所以我通过表中所示的类比来弥补:
{- base, Hackage.category-extras -}
import Control.Comonad
import Data.Monoid
data Cowriter w a = Cowriter (w -> a)
instance Functor (Cowriter w) where
fmap f (Cowriter g) = Cowriter (f . g)
instance Monoid w => Copointed (Cowriter w) where
extract (Cowriter g) = g mempty
instance Monoid w => Comonad (Cowriter w) where
duplicate (Cowriter g) = Cowriter
(\w' -> Cowriter (\w -> g (w `mappend` w')))
以下是这些(共)单原子的简化定义。fr_ob F表示仿函数F在对象上的映射,fr_mor F表示仿函数F在射态上的映射。有一个幺对象在Ç。
- 作家
- 读者
- 共同阅读器
- Cowriter
The question is that the adjunction in relates functors, not monads. I do not see how the adjunction implies "Coreader is a comonad" "Reader is a monad" and "Writer is a monad" "Cowriter is a comonad".
Remark. I am struggling to provide more context. It requires some work. Especially, if you require categorical purity and those (co)monads were introduced for programmers. Keep nagging! ;)