我正在使用Control.Comonad.Representable.Store来表示游戏的网格对象;网格是:type Grid = Store (Compose Vector Vector) a
;其中Vector具有由Int
索引的可表示实例。
这允许我使用comonadic extend
和experiment
来与网格方块进行交互,并让我使用Store monad的焦点(由pos
表示)作为光标进入网格。
我正在寻找的是一种合理的方法,可以在商店的焦点处设置值,或者使用Representable
Compose Vector Vector
实例来设置/改变给定索引处的值。据我所知,使用Comonad
和Representable
中的工具,我只能从结构中获取值,我找不到任何函数,如:over :: ComonadStore s w => (a -> a) -> w a -> w a
甚至{{ 1}}。
当然,我可以索引向量,调整值,然后将其设置回索引;或者甚至使用Representable f => set :: f a -> Rep f -> a -> f a
来重建结构但是进行了调整,但那些听起来效率低且不合理。似乎这些类型的某些组合能够为我做到这一点;或者如果还有其他一些我想念的约束/类型类,可以帮到这里。
谢谢!