这似乎很容易,但是如果我使用AcidState的Data.Acid.Memory.Pure模块,我如何从查询中获取纯值。我想我可以将问题概括为"我如何从更新 monad 中获得任何价值?您会看到,我正在尝试编写一个测试来执行以下普通任务:
- 使用对象更新纯 AcidState
- 使用 IxSet 退出状态的查询
- 比较查询的对象和更新返回的对象以实现等效性。
我需要从中得到一个纯粹的"布尔值",以便与测试框架的集成变得容易。起初我以为我会简单地使用Control.Monad.State的runState,但我错了(或者只是做得不对)。我该怎么办?
由于你使用的是Data.Acid.Memory.Pure
,你可以使用该模块中的update
、query
和update_
函数(而不是来自Data.Acid
的函数)来纯粹地查看事件的结果。 与常规的、不纯acid-state
一样,您不是简单地"运行Update
并Query
monads",您必须先将它们转换为事件。 使用 Data.Acid.Memory.Pure
,这意味着您只需用 Event
的构造函数包装它们。