I don't think that's how you'd handle a state change in idiomatic Haskell. What you propose sounds very error-prone.