Functional programming from first principles, part 1 – motivation Posted on 2026-07-26 Functional programming is considered one of the four major programming language paradigms. The typical classification divides all programming languages into either imperative or declarative. Imperative languages can be further subdivided into procedural (examples of which are: C, Go, and Rust) and object-oriented (examples: Smalltalk, C++, and Java), while declarative languages can be subdivided into logical (examples of which are: Prolog and Rocq), and functional (examples: Haskell, Elm, and Idris). In this article series, we will focus on that last group – functional programming languages: their purpose, design, and how they are different from other kinds of languages. We will explore all these topics through the lens of creating a brand-new functional programming language from scratch, and seeing how the constraints of functional programming shape its design. The goal of this article series is to present functional programming concepts in a way that is accessible to programmers familiar with imperative languages, show what the differences are between functional and imperative approaches, what are the strengths of functional languages, and illustrate the different tradeoffs one can make when designing a functional language. Note that this is not a course on learning programming from scratch; it assumes that you know how to program already, and that you’re familiar with at least one language from the imperative family. Mathematical definition of functions Functional programming takes its name from the concept of a function in mathematics. Because of these formal underpinnings, there is often some math involved when discussing functional programming concepts. Don’t be discouraged by this; the math is generally not that difficult, and having strong formal underpinnings really helps validate that a given aspect of the language is well-designed. So, what is a function in math? It’s a...
First seen: 2026-07-27 09:24
Last seen: 2026-07-27 11:26