Questions tagged «comonad»

1
了解为什么拉链是Comonad
这是对上一个问题的回答的后续步骤。 假设我需要映射每个项目a:A的List[A]来b:B使用功能def f(a:A, leftNeighbors:List[A]): B和产生List[B]。 显然,我不能只调用map列表,而可以使用列表拉链。拉链是用于在列表中移动的光标。它提供对当前元素(focus)及其相邻元素的访问。 现在,我可以将替换f为 def f'(z:Zipper[A]):B = f(z.focus, z.left)并将该新函数传递f'给的cobind方法Zipper[A]。 这样的cobind工作:先f'用拉链调用,然后移动拉链,f'再用新的 “移动”拉链调用,再移动拉链,依此类推,依此类推,直到拉链到达列表的末尾。 最后,cobind返回一个类型为的新拉链Zipper[B],可以将其转换为列表,从而解决了问题。 现在请注意和之间的对称性cobind[A](f:Zipper[A] => B):Zipper[B],bind[A](f:A => List[B]):List[B]这就是为什么Lista Monad和Zipperis a 的原因Comonad。 是否有意义 ?

2
Haskell中的Comonad类型类是什么?
Haskell中的Comonad类型类是什么?与Control.Comonad的comonad包中的Comonad一样(也欢迎对提供Comonad类型类的任何其他包进行解释)。我隐约听到了Comonad的信息,但我真正了解的只是它提供的东西extract :: w a -> a,与Monad的相似return :: a -> m a。 在“真实”代码中指出Comonad的“真实生活”用法的加分点。

3
一般拉链拉链
对于任何容器类型,我们都可以形成(以元素为中心)拉链,并知道此结构是Comonad。最近在另一个Stack Overflow问题中针对以下类型对此进行了详细探讨: data Bin a = Branch (Bin a) a (Bin a) | Leaf a deriving Functor 使用以下拉链 data Dir = L | R data Step a = Step a Dir (Bin a) deriving Functor data Zip a = Zip [Step a] (Bin a) deriving Functor instance Comonad Zip where …

1
如何将连续单声道分解为左右伴随?
由于State monad可分解为乘积(左-函子)和阅读器(右-可表示)。 有没有一种方法可以使Continuation Monad分解?下面的代码是我的尝试,它不会类型检查 -- To form a -> (a -> k) -> k {-# LANGUAGE MultiParamTypeClasses, TypeOperators, InstanceSigs, TypeSynonymInstances #-} type (<-:) o i = i -> o -- I Dont think we can have Functor & Representable for this type synonym class Isomorphism a b where from :: …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.