提供monad堆栈的测试实现

时间:2014-08-31 16:38:42

标签: haskell

这是我程序中构建的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;。 感谢。

1 个答案:

答案 0 :(得分:4)

如果p4Px ()操作,那么您定义要传入的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)