comonad相关内容
Haskell 中的 Comonad 类型类是什么?正如来自 Control.Comonad 中的 Comonadcomonad 包(也欢迎对提供 Comonad 类型类的任何其他包进行解释).我隐约听说过 Comonad,但我真正知道的是它提供了 extract :: w a ->a,有点类似于 Monad 的 return :: a ->一个. 在“真实"代码中注意“真实"使用 Como
..
给定任何容器类型,我们可以形成(以元素为中心的)Zipper 并且知道这个结构是一个 Comonad.最近在 another Stack 中详细探讨了这一点以下类型的溢出问题: data Bin a = Branch(Bin a) a (Bin a) |叶派生函子 带有以下拉链 data Dir = L |电阻data Step a = Step a Dir (Bin a) 派生函子data
..
是否有带有签名的内置函数:: (Monad m) =>m a ->一个 ? Hoogle 说没有这样的功能. 你能解释一下原因吗? 解决方案 monad 只提供两个功能: return :: Monad m =>->嘛(>>=) :: Monad m =>m a ->(a -> m b) ->米 这两个都返回 m a 类型的东西,所以没有办法以任何方式组合它们来获得 Mon
..
我有这个简单的 Expr AST,我可以轻松地将它转换为 String. import Prelude 隐藏(可折叠)进口合格前奏将 Data.Foldable 导入为 F导入 Data.Functor.Foldable导入 Data.Monoid导入 Control.Comonad.Cofree数据 ExprF r = Const Int|添加 r派生 ( Show, Eq, Ord, Fun
..
让我们考虑一个在隧道中游荡的矮人.我将定义一个代表这种矮人的类型.这样的情况: 数据X a = X {xs :: [a],i :: Int}显示:: X Bool->IO()显示X {..} = putStrLn(concatMap f xs)其中{f True ="*";f False =“-"} 在这里,您会在隧道的一部分中看到一个矮人: λ显示x-* --- 已发现指向容器是 C
..
用精巧的摘要表示-对Comonads的描述似乎很成功-将它们描述为“输入杂质的类型" '. codata的等效精简(单句)描述是什么? 解决方案 "Codata是可能由无限值占据的类型" 这与仅由有限值占据的“数据"形成对比.例如,如果我们使用列表的“数据"定义,那么它就被有限长度的列表所占据(如ML中一样),但是如果我们使用"codata"的定义,它也就被无限的也所占据了长度
..
用精妙的摘要表示-对Monads的描述似乎赢得-将它们描述为“不纯计算的类型". 什么是对同伴的精简(单句)描述? 解决方案 “一种用于上下文相关计算的类型" 或者,更好的对单子的“虚假描述"可能是“输出杂质的类型",在这种情况下,对共纳原子的虚假描述是“输入杂质的类型". (如果您对comonads感兴趣,在我的一些演讲幻灯片中会提供更多介绍:
..
考虑State类型-或至少是简化版本: newtype State s a = State { runState :: s -> (a, s) } 现在,假设我们要导出StateT monad转换器. transformers对其定义如下: newtype StateT s m a = StateT { runStateT :: s -> m (a, s) } 在这里,m已放置
..
我使用 Writer monad来跟踪任意值(例如 Int )。一旦标志被设置,它就是“粘性”,并将其自身附加到由于任何标记的操作而产生的所有值。 有时碰撞标志与个人价值观,有时我想与列表等复合结构相关联。当然,一旦碰撞标志被设置为整个列表,假定它被设置为单个元素也是有意义的。所以对于作者monad m 我需要以下两个操作: sequence :: [ma] - > m [a]
..
我们可以用X来解释这个公式吗? 解决方案 经过一番思考,我认为这实际上是一个落后的问题。有人可能会认为 ComonadApply 是 Comonad Applicative 是 Monad ,但事实并非如此。但是为了看到这一点,让我们使用PureScript的类型类层次结构: pre codelass c Functor f其中 fmap ::(a - > b) - > f a -
..
在讨论更多有用的标准课程以向其中的推荐 class坐标c其中 createCoordinate :: x - > y - > c x y getFirst :: c x y - > x getSecond :: c x y - > y addCoordinates ::(Num x,Num y)=> c x y - > c x y - > cxy
..
好吧,我们假设你有类型 newtype Dual f a = Dual {dual :: forall r。 f(a - > r) - > r} 事实证明,当 f 是一个Comonad, Dual f 是一个Monad(有趣的练习)。你可以定义 fmap ab(Dual da)= Dual $ \fb - >它可以反过来工作吗? da $ fmap(.ab)fb 和
..
我想创建一个二叉树拉链作为comonad的一个实例,但我无法弄清楚如何正确实现 duplicate 。 以下是我的尝试: { - #LANGUAGE DeriveFunctor# - } import Data 。功能 导入Control.Arrow 导入Control.Comonad 数据BinTree a = Leaf a |分支a(BinTree a)(Bi
..
以下是这个问题的一个更具体的变体:只突出Store Comonad的焦点?,因为不会一次询问多个问题。 是否有与 Control.Lens ,它允许我与一个comonad的焦点进行交互(从 extract )或与Store Comonad的索引/值( pos )? 好像镜片可能是有些在这里使用,但我一直无法找到任何合适的东西;任何帮助将不胜感激,谢谢! 解决方案 Comonad
..
对 Haskell中的Comonad类型类型有一些想法 ,我听说过Store的comonad。但看看 Control.Comonad.Store.Lazy ,我真的不明白。这是什么意思?它是为了什么?我听说Store = CoState是State Monad的双重身份。这意味着什么? 解决方案 如果您看一下 StoreT本身。 您可以将其视为更大结构中的“地点”。例如,镜头只是 a
..
{ - #语言KindSignatures# - } { - #LANGUAGE DataKinds# - } { - #LANGUAGE GADTs# - } { - #LANGUAGE TypeFamilies# - } data Nat = Z | S Nat data U(n :: Nat)x其中 Point :: x - > U Z x 维度:: [U
..
我有这个简单的 Expr AST,我可以很容易地将它转换为 String 。 导入Prelude隐藏(可折叠) 导入限定前奏 导入Data.Foldable为F 导入Data.Functor。可折叠 导入Data.Monoid 导入Control.Comonad.Cofree 数据ExprF r = Const Int |添加rr deriving(Show,Eq,Ord,
..
Haskell中的Comonad类型类是什么?正如来自 Control.Comonad中的Comonad comonad软件包(对提供Comonad类型的任何其他软件包的解释也是受欢迎的)。我隐约听说过Comonad,但我真正知道的是,它提供了 extract :: w a - > a ,类似于Monad的 return :: a - > 在“真实”代码中注明Comonad的“真实生活”用途
..
是否有内置函数,其签名 ::(Monad m)=> m a - > a ? Hoogle告诉我们没有这样的功能。 你能解释一下为什么吗? 解决方案 函数: return :: Monad m => a - > m a (>> =):: Monad m => m a - > (a - > m b) - > mb 这两个都返回类型为 ma ,因此无
..
在 链文档中,您会发现: 在包装对象上调用 chain 会导致所有将来的方法调用 以返回包装的对象。完成 计算后,使用值检索最终值。 因此, chain 功能创建monad? 解决方案 不,不是一个monad,而是一个comonad!它变成一个函数,它接受一个包装对象并将一个正常值返回到一个函数中,该函数将获取并返回一个包装对象。作为一个Haskell类型的签名可以是:
..