Use monad transformer to layer state