Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何将一个单子和一个单子组合成一个单子?_Scala_Haskell_Functional Programming_Monads_Comonad - Fatal编程技术网

Scala 如何将一个单子和一个单子组合成一个单子?

Scala 如何将一个单子和一个单子组合成一个单子?,scala,haskell,functional-programming,monads,comonad,Scala,Haskell,Functional Programming,Monads,Comonad,假设我有 一个comonadD 单子T 单子T上的一个分配律l:dt->td 如何定义comonaddt?您不能。假设D是标识comonad,T是Cont Void,即空类型的延续单子 newtype D a = D {runD :: a} newtype T a = T {runT :: (a -> Void) -> Void} 那么,分配性就无关紧要了。但是extract::D(ta)->a不能定义为一个完全可计算的程序。这将是对所有a的双重否定消除。((a->Void)-

假设我有

  • 一个comonad
    D
  • 单子
    T
  • 单子
    T
    上的一个分配律
    l:dt->td

如何定义comonad
dt

您不能。假设
D
是标识comonad,
T
Cont Void
,即空类型的延续单子

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

那么,分配性就无关紧要了。但是
extract::D(ta)->a
不能定义为一个完全可计算的程序。这将是对所有a的双重否定消除
。((a->Void)->Void)->a
,在构造性语言中无法定义。

您不能。假设
D
是标识comonad,
T
Cont Void
,即空类型的延续单子

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

那么,分配性就无关紧要了。但是
extract::D(ta)->a
不能定义为一个完全可计算的程序。这将是对所有a的双重否定消除
。((a->Void)->Void)->a
,这在构造性语言中是无法定义的。

是什么让您认为这是可能的?假设
D
是一个恒等式,那么这样的方案会把任何一个单子都变成一个单子。@李耀霞,因为我认为这是一个分配定律的意义所在。那么它有什么用呢?是什么让你认为这是可能的?假设
D
是一个恒等式,那么这样的方案会把任何一个单子都变成一个单子。@李耀霞,因为我认为这是一个分配定律的意义所在。那么它对什么有用呢?很好:-(那么,如果你不能用它来推导一个comonad(或monad),那么拥有一个分配定律又有什么意义呢?@Bob我们需要分配来组合,例如。很好:-(那么,如果你不能用它来推导一个comonad(或monad),拥有一个分配定律又有什么意义呢)?例如,Bob我们需要发行版来创作。