I've read the updated re-frame docs some time ago but it kind of went over my head 🙂 As far as I understand the new effects stuff solves the problem of event replayability which was addressed in Carry from the get-go by splitting event handling into control/reconcile phases. So comparing the two solutions I like Carry's straightforward "functions-only" approach more than re-frame's new "declarative side-effects" - it's much easier to grasp and, dare I say, pragmatic. There are also interceptors added in re-frame instead of a middleware pattern. But again, I haven't bought how they are much better than "raw" higher-order functions. I surely miss over pros/cons and I haven't used re-frame in practice. I would like to hear other opinions on this matter.
re-frame has always felt a bit over-engineered to me to be honest. It's certainly a well-made library, but the approach that was taken has created quite a few challenges down the road, and in the end the thing we want to achieve is not THAT complicated. So you don't need a complicated solution to a simple'ish problem.