我正在使用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
重建结构但进行了调整,但这些听起来效率低下且不雅。似乎这些类型类的某种组合可以为我做到这一点;或者,如果我缺少其他一些约束/类型类,可以在这里提供帮助。
谢谢!