Splitting StateC into a Reader/Writer/State transformer, as scadOpts was only ever read from, and messages was only ever written to or returned at the end of a processing batch.
This also involved splitting these values out of CompState as they did not need to both readable and writable.
Setting up some constraint types to allow easier use of the new monad transformer in code that doesn't need to know the exact structure of the transformer, just what it can do.
Splitting StateC into a Reader/Writer/State transformer, as scadOpts was only ever read from, and messages was only ever written to or returned at the end of a processing batch.
This also involved splitting these values out of CompState as they did not need to both readable and writable.
Setting up some constraint types to allow easier use of the new monad transformer in code that doesn't need to know the exact structure of the transformer, just what it can do.