January 3, 2026
Pipe dreams vs. monad meltdowns
Show HN: FP-pack – Functional pipelines in TypeScript without monads
Dev brawl: “No monads” claim sparks pipe dreams and footgun fears
TLDR: fp-pack promises simple, “no monads” functional pipelines for JavaScript/TypeScript, stirring big buzz. The community is split: some praise the practicality, while others say it’s secretly a monad, worry about confusing error patterns, and call the default “any” type a dangerous trap.
A new toolkit called fp-pack just hit Hacker News promising simple, left‑to‑right “pipe” steps for JavaScript/TypeScript—no heavy math, no mysterious “monads.” The creator even asked for feedback on its SideEffect error-handling pattern, and the crowd obliged with fireworks. One camp cheered the “just use functions” vibe; the other saw… a monad in a mustache. “How is this not a monad?” snapped one commenter, accusing fp-pack of hiding the very thing it swears off. That debate lit up the thread like a code review from your least favorite senior.
Concern No. 2: readability in real teams. A skeptic warned the SideEffect pattern might confuse average devs in a shared codebase, pointing to the docs and asking if this cleverness will survive Monday morning. Then came a practical gut punch: a commenter called the default “any” type from pipelines “brutal,” branding it a “footgun” that could blow up TypeScript safety. Meanwhile, a battle-scarred veteran dropped a meme-ready line—“RX is a brain antipattern”—sparking flashbacks to reactive libraries and team meltdowns.
Fans love the zero-dependency, curried helpers and lazy streams, and the repo’s here if you want receipts: github.com/superlucky84/fp-pack. But the mood? Equal parts excitement and side-eye. Is fp-pack practical magic—or Schrödinger’s Monad, both there and not there at once?
Key Points
- •fp-pack is a zero-dependency, TypeScript-written functional toolkit for JavaScript/TypeScript projects focused on pipe-based composition.
- •It provides pipe and pipeAsync as primary composition tools, with strong type inference and production-oriented utilities.
- •The SideEffect pattern enables declarative error and side-effect handling with short-circuiting via pipeSideEffect/pipeAsyncSideEffect and strict variants.
- •The library is immutable and pure by default, offers lazy stream processing (stream/*) for large datasets, and curried APIs for partial application.
- •Documentation includes comprehensive API categories (Composition, Control Flow, Array, Object, etc.), examples, and guides for practical use.