runTrace (trace s) = pure ()
runTrace (pure a) = pure a
runTrace (trace s) = liftIO (putStrLn s)
runTrace (pure a) = pure ([], a)
runTrace (trace s) = pure ([s], ())