好吧,让我们说你有类型
newtype Dual f a = Dual {dual :: forall r. f(a -> r)->r}
事实证明,什么时候f
是Comonad,Dual f
是Monad(有趣的运动).它是否相反?
您可以定义fmap ab (Dual da) = Dual $ \fb -> da $ fmap (. ab) fb
和extract (Dual da) = da $ return id
,但我不知道如何定义duplicate
或extend
.
这甚至可能吗?如果没有,那么证据不存在(是否有一个特定的Monad m
,你可以证明Dual m
它不是一个comonad)?
一些观察:
Dual IO a
基本上Void
(并且Const Void
是有效的Comonad
).
Dual m a
为MonadPlus m
是 Void
(只使用dual mzero
).
Dual Reader
是Env
.
Dual Writer
是Traced
.
Dual State
是的Store
,我想.