我想跟踪状态单子的变化。这不起作用:
main :: IO ()
main = do
print $ snd $ execState compute initialState
traceThis :: (Show a) => a -> a
traceThis x = trace ("test: " ++ show x) x
compute :: State ([Row], Integer) String
compute = liftM traceThis $ get >>= \(rs, result) -> put (rs, result + 3) >> return "foo"
没有打印任何内容(除了已正确更新的主函数中打印的最终结果)。
跟踪状态的任何想法或替代方法?我想用它来检查项目欧拉解决方案的正确性。