That looks like a continuation monad to me. `C m a` can also be expressed as `Cont (Action m) a`, where Cont is from the transformers library.
In this case, I suggest looking at how the C type is used, rather than focusing on the Monad instance. Since it's all bog standard continuation passing so far, most likely the interesting part is elsewhere.
I'm on my phone so I can't supply links, but I hope this helps a bit.
I have used gradients and integrals for almost a half of century, and I
lost all intuition thereof several times... I thought I had quite a
quite substantial intuition of gradients, and then I discovered
tensorial calculus, and when my intuition "progressed", I discovered
differential forms, and then fibre bundles, and I broke some teeth on
topological issues, and then ...
And with integrals it was much worse. Без водки не разберешь!
> In math, the only ways I know of to get a better intuition is practice and a good teacher. Maybe it is the same in haskell?
In math, your practice doesn't give you any intuition. Your training and
your teacher increase your belief that the model you use is right. It is
the "love after marriage" syndrome. It works with most formal,
disciplined approach to anything, Haskell included. It is needed that
you can *formulate* your thoughts, but the true intuition, your insight,
the impression that you KNOW that something is "right", is independent
of it.
The best.
Jerzy Karczmarczuk
Caen, France