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.

Hottest takes

“How is this not a monad?” — epgui
“The default any return type is brutal—a real footgun” — wk_end
“RX is a brain antipattern” — almosthere
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.