【问题标题】:How to combine a comonad and a monad into a comonad?如何将comonad和monad组合成comonad?
【发布时间】:2020-03-26 08:12:18
【问题描述】:

假设我有

  • comonad D
  • 一个单子T
  • 共单子D对单子T的分配律l : D T -> T D

我怎样才能定义comonad D T

【问题讨论】:

  • 是什么让您认为这是可能的?让D 成为身份共单子,那么这样的方案会将任何单子变成共单子。
  • @Li-yaoXia 因为我认为这是有分配规律的关键。那么它有什么用呢?

标签: scala haskell functional-programming monads comonad


【解决方案1】:

你不能。假设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,这在建设性语言中是无法定义的。

【讨论】:

  • 太棒了 :-( 那么,如果你不能使用分配律来推导共单子(或单子),那么有什么意义呢?
  • @Bob 我们需要分发来撰写two comonads,例如。
猜你喜欢
  • 1970-01-01
  • 2016-04-22
  • 2017-12-22
  • 1970-01-01
  • 2019-06-16
  • 2019-06-19
  • 2018-03-15
  • 2015-02-01
  • 2021-01-20
相关资源
最近更新 更多