6 ms·
It’s definitely monad-adjacent. The main difference is that SideEffect isn’t a compositional context — there’s no bind/flatMap, and composition intentionally s
by superlucky84 9mo ago
It’s definitely monad-adjacent.
The main difference is that SideEffect isn’t a compositional context — there’s no bind/flatMap, and composition intentionally stops once it appears.
It’s meant as an explicit early-exit signal in pipe-first code, not a general computation container.
- epgui 9mo agoIs there any advantage whatsoever to this, as opposed to a proper monad? I’m not seeing it. The point of monads is that they solve this exact category of problem in the simplest possible way.
- superlucky84 9mo agoOne more practical point is that a full monad doesn’t fit very naturally into a pipe-first interface. Once you commit to a real monad, you need map/flatMap, lifting, unwrapping, and rules about staying inside the context across the whole pipeline. At that point, the pipe abstraction stops being the primary mental model — the monad does. SideEffect deliberately avoids that. It keeps the pipe interface intact and only adds a single, explicit signal: “stop here”. That’s why it’s less powerful than a monad, but also much simpler to integrate into existing pipe-based code.
- superlucky84 9mo agofp-pack is also intentionally scoped for everyday frontend developers. It tries to borrow function composition and declarative structure without requiring familiarity with full FP abstractions like monads or effect systems.