Blog

Articles, tutorials, and insights about functional programming in Java

Subscribe via RSS
Monads Without the Smoke and Mirrors: a Pragmatic Explanation

Monads Without the Smoke and Mirrors: a Pragmatic Explanation

Every monad tutorial starts with the definition and ends with confusion. This one starts with the problem — chaining computations that can fail, be absent, or produce multiple values — and arrives at the definition by accident.

dmx-fun 0.0.15 Released

dmx-fun 0.0.15 Released

Version 0.0.15 brings first-class Quarkus transaction support with full JTA TxType propagation, five new integration modules (fun-http, fun-jakarta-jaxb, fun-jakarta-validation, fun-tracing, fun-observation), a Bill of Materials, CycloneDX SBOMs, and critical correctness fixes across fun-quarkus, fun-jackson, and fun-assertj.

Common Mistakes When Learning Functional Programming

Common Mistakes When Learning Functional Programming

Most functional programming mistakes are not syntax errors — they are conceptual ones. This post catalogs the thinking traps that slow engineers down when first adopting FP: the wrong goals, the wrong scope, and the wrong order of learning.

What Functional Programming Means for a Backend Engineer

What Functional Programming Means for a Backend Engineer

Functional programming is not about category theory, monads, or switching languages. For a backend engineer, it is a practical set of constraints that eliminate an entire class of bugs, make failures visible, and produce code that is easier to test and reason about.

JDK-First Functional Programming: How Far Can You Go Without Dependencies?

JDK-First Functional Programming: How Far Can You Go Without Dependencies?

Java 25's standard library ships with records, sealed interfaces, pattern matching, streams, and Optional. Before reaching for a library, how much functional programming can you express with the JDK alone — and where does it start to hurt?

dmx-fun 0.0.14 Released

dmx-fun 0.0.14 Released

Version 0.0.14 is the ecosystem release: Spring transaction support, Spring Boot autoconfiguration, Micrometer metrics, Resilience4J adapters, Guard, Accumulator, Resource, NonEmptyMap, NonEmptySet, Try.timeout, and a production-like Spring Boot sample — all in one milestone.

Road to 0.1.0: Production-Ready dmx-fun Is Near

Road to 0.1.0: Production-Ready dmx-fun Is Near

0.1.0 will be our first stable production-ready release. Here is the current status of 0.0.14, the concrete roadmap for 0.0.15 based on active GitHub issues, and what comes next.

Functional Design of Business Rules

Functional Design of Business Rules

Stop encoding business rules as scattered if/else chains and hidden exceptions. This post shows how to model rules as composable, testable, first-class values using Guard, Validated, and Result — with practical Java 25 examples.

Refactoring Object-Oriented Code Toward a Functional Style

Refactoring Object-Oriented Code Toward a Functional Style

A practical, step-by-step guide to moving Java code from a mutable, exception-driven OO style toward immutable, composable functional pipelines — without rewriting everything at once.