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我们需要发行版来创作。