问题标签 [comonad]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
performance - 使用 Store comonad 执行 Conway 的生命游戏
我使用Store comonad编写了一个简单的Conway 生命游戏实现(参见下面的代码)。我的问题是网格生成从第五次迭代开始明显变慢。我的问题是否与我使用 Store comonad 的事实有关?还是我犯了一个明显的错误?据我所知,其他基于 Zipper comonad 的实现是有效的。
list - 非空列表comonad
我一直在冥想comonad,并且直觉认为非空列表(“完整列表”)是comonad。我在 Idris 中构建了一个似是而非的实现,并且一直致力于证明Comonad 定律,但未能证明其中一个定律的递归分支。我如何证明这一点(?i_do_not_know_how_to_prove_this_if_its_provable
漏洞)——或者我错了我的实现是一个有效的comonad(我已经查看了Haskell的NonEmpty
comonad实现,它似乎和我的一样)?
haskell - 只改变 Store Comonad 的焦点?
我正在使用Control.Comonad.Representable.Store来表示游戏的网格对象;网格是:type Grid = Store (Compose Vector Vector) a
; 其中 Vector 有一个由 索引的可表示实例Int
。
这允许我使用 comonadicextend
和experiment
网格方块与它们的邻居进行交互,并且我可以使用 Store monad 的焦点(由 表示pos
)作为网格中的光标。
我正在寻找的是一种合理的方法来设置商店焦点处的值,或者使用的Representable
实例Compose Vector Vector
来设置/改变给定索引处的值。据我所知,使用 in 中的工具,Comonad
我Representable
只能从结构中获取值,我找不到任何函数,例如:over :: ComonadStore s w => (a -> a) -> w a -> w a
甚至Representable f => set :: f a -> Rep f -> a -> f a
.
当然,我可以索引向量,调整值,然后将其设置回其索引;甚至用于tabulate
重建结构但进行了调整,但这些听起来效率低下且不雅。似乎这些类型类的某种组合可以为我做到这一点;或者,如果我缺少其他一些约束/类型类,可以在这里提供帮助。
谢谢!
haskell - 镜头超过 Comonads 或 Representable
这是这个问题的一个更具体的变体:Mutate only focus of Store Comonad? ,为了避免一次问多个问题。
是否有任何与Control.Lens兼容的镜头允许我与共单子的焦点(来自 的值extract
)或与存储共单子的索引/值(pos
)进行交互?
似乎镜头在这里可能有用,但我一直找不到合适的东西;任何帮助将不胜感激,谢谢!
haskell - 变压器中的类型变量位置
考虑State
类型 - 或者至少是简化版本:
现在,假设我们要导出StateT
monad 转换器。transformers
定义如下:
在这里,m
被放置在函数箭头的右侧,但在元组之外。但是,如果我们不知道正确的答案,我们可能会放在m
其他地方:
显然版本transformers
是正确的,但为什么呢?更一般地说,在定义 monad 转换器时,如何知道将“内部”monad 的类型变量放在哪里?更概括地说, comonad 变压器是否有类似的规则?
haskell - 如何在 2D 列表上更改 Haskell Store Comonad 的焦点
我正在努力解决以下问题。我正在尝试使用 Haskell 中的商店 comonads 制作生命游戏。我有以下相关代码:
然后我创建了一个初始字段:
初始字段是一个小例子,我想在其中测试我的程序。现在,棘手的部分来了。
现在我的问题是,将焦点转移到更新商店的好方法是什么?向下移动很简单:
我的问题是,例如,向右或向左移动的好方法是什么?我是否选择了错误的索引函数(head.head)?
感谢您的时间!
scala - Store Comonad 和 Representable Store Comonad 在函数式编程中有什么区别?
Representable Store Comonad 和 Store Comonad 提供了类似的功能……我们什么时候应该使用其中一个,有什么好处?