Re:Show HN: FP-pack – Functional pipelines in TypeScript wit...
by superlucky84 on Saturday January 03, 2026 @05:18PM
(#46482300)
One 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.
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.