Deseo hacer un seguimiento de los cambios en la mónada de estado. Esto no funciona:¿Cómo uso Debug.Trace.trace en la mónada de estado?
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"
Nada se imprime (excepto el resultado final de la impresión en la función principal, que ha sido correctamente actualizada).
¿Alguna idea o alternativa para rastrear el estado? Quiero usar esto para verificar la corrección de una solución de proyecto euler.
¡Muy bonito! Una vez que ya no necesito iniciar sesión, puedo desactivarlo eliminando una sola expresión. – somesoaccount
@somesoaccount Se actualizó la respuesta con una solución más general. –