这是我程序中构建的monad堆栈:
type Px a = ReaderT PConf (State PState) a
其中PConf和PState是保存配置和应用状态的任意数据类型。
我需要提供默认实现,以便我可以测试我的功能,给出一个PConf'和一个' PState':
p4 :: Px ()
p4 = ???
where
conf = PConf 4 10 10 [0, 1]
state = PState 0 0 $ M.fromList [((x, y), Nothing) | x <- [0..9], y <- [0..9]]
我不知道写什么&#34; p4 =&#34;这样实施就可以使用&#39; conf&#39;并且&#39;州&#39;。 感谢。
答案 0 :(得分:4)
如果p4
是Px ()
操作,那么不您定义要传入的conf
的点,以及state
应该是最初的状态,而不是那个。相反,你应该将它们放在 tests p4
:
p4 :: Px ()
p4 = ...
test = runState (runReaderT p4 conf) state
where
conf = PConf 4 10 10 [0, 1]
state = PState 0 0 $ M.fromList [((x, y), Nothing) | x <- [0..9], y <- [0..9]]
编辑:如果您的问题仍在编写p4
本身,这里有一个小型模型p4
,它会更改部分状态以包含部分原始conf
:
p4 = do
PConf x y z _ <- ask
PState m n mp <- get
put $ PState m n (M.insert (x, y) (Just z) mp)