Category transformers
I’m no category theorist but I enjoyed this elaboration on Chris Penner’s excellent posts. It’s cool to see where we can go further.
There are a couple of typos jsyk; you start using ProKleisliT when the type is initially defined as ProKleisli.
The end types are a little unwieldy, but I do note that they should stack fairly easily; I wonder whether an Effectful-style type level list would let you abstract that horrid stacking. I also like that you can put IO anywhere in the stack, which just seems nice and symmetrical.
Do the effects of “later” computations get skipped if you have an earlier failing computation? For example, in the transformer example you ask for the environment variable then the user input which you subsequently parse; if you asked for user input, then parsed, then asked for the environment variable, would that last computation not be run?
Discussion in the ATmosphere