1

假设我有

  • 一个comonadD
  • 一个单子T
  • l : D T -> T DcomonadD对 monad的 分配 律T.

我怎样才能定义comonad D T

4

1 回答 1

7

你不能。假设D是恒等式单子并且TCont Void,即空类型的延续单子。

newtype D a = D {runD :: a}
newtype T a = T {runT :: (a -> Void) -> Void}

然后分配性微不足道。但extract :: D (T a) -> a不能定义为一个完全可计算的程序。这将是双重否定消除forall a. ((a -> Void) -> Void) -> a,这在建设性语言中是无法定义的。

于 2019-12-01T15:11:42.570 回答