# Advanced Functional Programming with Elixir (PragProg)

**URL:** <https://forum.devtalk.com/t/advanced-functional-programming-with-elixir-pragprog/211312>\
**Category:** Backend Learning Resources\
**Tags:** published-book, pragprog, elixir, functional-programming, book-advanced-functional-programming-with-elixir\
**Created:** [18 August 2025 21:03 UTC](https://forum.devtalk.com/t/advanced-functional-programming-with-elixir-pragprog/211312 "2025-08-18T21:03:02Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![PragmaticBookshelf](https://forum.devtalk.com/user_avatar/forum.devtalk.com/pragmaticbookshelf/32/463_2.png) [@PragmaticBookshelf](https://forum.devtalk.com/u/PragmaticBookshelf)\
**Post date:** [18 August 2025 21:03 UTC](https://forum.devtalk.com/t/advanced-functional-programming-with-elixir-pragprog/211312/1 "2025-08-18T21:03:02Z")

</div>

Use advanced functional programming principles, practical Domain-Driven Design techniques, and production-ready Elixir code to build scalable, complex systems from simple, reusable components.

 ![jkelixir-500](https://forum.devtalk.com/uploads/default/original/2X/7/7827139f7d176dfe7190ef5952a2fec8c2eeb256.jpeg)

### Joseph Koski @JKWA

_Series editor: Sophie DeBenedetto_@SophieDeBenedetto  
_Developmental editor Adaobi Obi Tulton_ @aotulton

Combine advanced functional programming concepts with production-ready Elixir and proven domain-driven design techniques to write cleaner, more thoughtful software. You’ll explore foundational ideas like equality, ordering, predicates, monoids, and monads—then go beyond syntax as you develop intuition for composing logic, modeling behavior, and growing systems. With a focus on maintainable, declarative code over theory, you’ll gain practical, composable patterns you can apply right away.

Get ready to manage crowds, adjust priorities, and keep everyone safe in FunPark, a place that never sits still. Your job is to model that complexity and build the systems that keep everything running smoothly, even as the business team is still figuring out what they want and the experts keep rewriting the rules.

Using core abstractions—equality, ordering, predicates, monoids, and monads—you’ll break problems into small, composable pieces that are both well-behaved and easy to combine. Rather than getting bogged down in theory or formal proofs, you’ll dive into real-world Elixir—using protocols, structs, and pattern matching to express shared behavior across your domain. Along the way, you’ll build the vocabulary and mental models you need to organize complex logic, supported by a production-ready open-source library you can use, extend, and explore in your own projects.

Whether you’re an Elixir developer mastering functional programming or a functional programmer exploring Elixir, you’ll discover how to write code that’s easier to reason about—and create systems that stay understandable, even as they grow.

* * *

**Joseph Koski** is a software engineer with expertise in functional programming, domain-driven design, and safety-critical systems. He created the Funx library, bringing tools like monads to Elixir. He writes at [joekoski.com](https://www.joekoski.com), sharing insights on functional programming, real-time systems, and using Elixir to solve complex, reliability-focused problems.

* * *

- Full details: [Advanced Functional Programming with Elixir: Model Behavior, Manage Complexity, and Maximize Maintainability by Joseph Koski](https://pragprog.com/titles/jkelixir/advanced-functional-programming-with-elixir/)
- View this book’s portal and details on how to post errata and suggestions [here](https://devtalk.com/books/advanced-functional-programming-with-elixir).

_Don’t forget you can get 35% off with your Devtalk discount! Just use the coupon code “ **devtalk.com**" at checkout 👍_

---

<div class="post-metadata">

**Author:** ![AstonJ](https://forum.devtalk.com/user_avatar/forum.devtalk.com/astonj/32/7_2.png) [@AstonJ](https://forum.devtalk.com/u/AstonJ)\
**Post date:** [18 August 2025 21:22 UTC](https://forum.devtalk.com/t/advanced-functional-programming-with-elixir-pragprog/211312/2 "2025-08-18T21:22:45Z")

</div>

Oooo this looks interesting! Just in time for when I want to get back into reading again!

I guess this book would be the next step after [Learn Functional Programming with Elixir (PragProg)](https://forum.devtalk.com/t/learn-functional-programming-with-elixir-pragprog/468)?

---

<div class="post-metadata">

**Author:** ![joeb](https://forum.devtalk.com/user_avatar/forum.devtalk.com/joeb/32/6721_2.png) [@joeb](https://forum.devtalk.com/u/joeb)\
**Post date:** [18 August 2025 22:02 UTC](https://forum.devtalk.com/t/advanced-functional-programming-with-elixir-pragprog/211312/3 "2025-08-18T22:02:27Z")

</div>

Will add to my reading list 🙂

---

<div class="post-metadata">

**Author:** ![JKWA](https://forum.devtalk.com/user_avatar/forum.devtalk.com/jkwa/32/7693_2.png) [@JKWA](https://forum.devtalk.com/u/JKWA)\
**Post date:** [20 August 2025 00:27 UTC](https://forum.devtalk.com/t/advanced-functional-programming-with-elixir-pragprog/211312/4 "2025-08-20T00:27:09Z")

</div>

_Learn Functional Programming with Elixir_ introduces the basics such as immutability, recursion, and higher-order functions.

Advanced Functional Programming with Elixir, on the other hand, builds mastery of functional patterns such as monoids, predicates, and monads as tools for thinking about structure and behavior. It is not a sequel _per se_, but a next step for those looking to deepen how they reason about code.

---

<div class="post-metadata">

**Author:** ![torstenn](https://forum.devtalk.com/user_avatar/forum.devtalk.com/torstenn/32/6475_2.png) [@torstenn](https://forum.devtalk.com/u/torstenn)\
**Post date:** [20 August 2025 14:58 UTC](https://forum.devtalk.com/t/advanced-functional-programming-with-elixir-pragprog/211312/5 "2025-08-20T14:58:15Z")

</div>

Would like to deepen my understanding of functional programming and would prefer to do it via Elixir. This is going on the list.

---

<div class="post-metadata">

**Author:** ![JKWA](https://forum.devtalk.com/user_avatar/forum.devtalk.com/jkwa/32/7693_2.png) [@JKWA](https://forum.devtalk.com/u/JKWA)\
**Post date:** [20 August 2025 23:25 UTC](https://forum.devtalk.com/t/advanced-functional-programming-with-elixir-pragprog/211312/6 "2025-08-20T23:25:32Z")

</div>

Thanks! I also recommend _Domain Modeling Made Functional_ by Scott Wlaschin. It’s written in F#, but the lessons go beyond the language. I’ve tried to follow his lead in _Advanced Functional Programming with Elixir_ . It’s written in Elixir, but the concepts are useful no matter what language you prefer.

---

<div class="post-metadata">

**Author:** ![octowombat](https://forum.devtalk.com/user_avatar/forum.devtalk.com/octowombat/32/3463_2.png) [@octowombat](https://forum.devtalk.com/u/octowombat)\
**Post date:** [22 August 2025 13:19 UTC](https://forum.devtalk.com/t/advanced-functional-programming-with-elixir-pragprog/211312/7 "2025-08-22T13:19:00Z")

</div>

Bought it yesterday and read chapter 1. Definitely will look forward to it bridging a gap in my knowledge as an experienced Elixir developer but not an experienced FP developer per se. Tried to learn FP via Haskell a couple of times but as I had no real need to use the language I dropped it too quickly.

---

<div class="post-metadata">

**Author:** ![JKWA](https://forum.devtalk.com/user_avatar/forum.devtalk.com/jkwa/32/7693_2.png) [@JKWA](https://forum.devtalk.com/u/JKWA)\
**Post date:** [22 August 2025 16:15 UTC](https://forum.devtalk.com/t/advanced-functional-programming-with-elixir-pragprog/211312/8 "2025-08-22T16:15:42Z")

</div>

I can sympathize. Learning Haskell can be frustrating. Most books and tutorials focus on syntax, not functional programming itself, which can leave you feeling adrift.

My goal was to light the path. Not to make functional programming easy (it’s not), but to help the reader focus their attention, avoid common missteps, and move forward with purpose.

---

<div class="post-metadata">

**Author:** ![adamaiken89](https://forum.devtalk.com/user_avatar/forum.devtalk.com/adamaiken89/32/2661_2.png) [@adamaiken89](https://forum.devtalk.com/u/adamaiken89)\
**Post date:** [24 August 2025 09:06 UTC](https://forum.devtalk.com/t/advanced-functional-programming-with-elixir-pragprog/211312/9 "2025-08-24T09:06:03Z")

</div>

Exciting! I’d be happy to see more real-world use case examples. My disappointments with Haskell references stem from how heavily they focus on the syntactic side.

---

<div class="post-metadata">

**Author:** ![joeb](https://forum.devtalk.com/user_avatar/forum.devtalk.com/joeb/32/6721_2.png) [@joeb](https://forum.devtalk.com/u/joeb)\
**Post date:** [27 August 2025 22:29 UTC](https://forum.devtalk.com/t/advanced-functional-programming-with-elixir-pragprog/211312/10 "2025-08-27T22:29:21Z")

</div>

Thank you for the suggestion. I am going to try to read _Domain Modeling Made Functional_ first, then your book. 🙂

---

<div class="post-metadata">

**Author:** ![jvelilla](https://forum.devtalk.com/user_avatar/forum.devtalk.com/jvelilla/32/7673_2.png) [@jvelilla](https://forum.devtalk.com/u/jvelilla)\
**Post date:** [30 September 2025 00:59 UTC](https://forum.devtalk.com/t/advanced-functional-programming-with-elixir-pragprog/211312/11 "2025-09-30T00:59:25Z")

</div>

Really interesting book, read chap 1 and 2.

---

<div class="post-metadata">

**Author:** ![apsori](https://forum.devtalk.com/user_avatar/forum.devtalk.com/apsori/32/6666_2.png) [@apsori](https://forum.devtalk.com/u/apsori)\
**Post date:** [30 September 2025 02:47 UTC](https://forum.devtalk.com/t/advanced-functional-programming-with-elixir-pragprog/211312/12 "2025-09-30T02:47:34Z")

</div>

Hello! Would you recommend learning Haskell to understand functional programming better?

---

<div class="post-metadata">

**Author:** ![JKWA](https://forum.devtalk.com/user_avatar/forum.devtalk.com/jkwa/32/7693_2.png) [@JKWA](https://forum.devtalk.com/u/JKWA)\
**Post date:** [30 September 2025 16:23 UTC](https://forum.devtalk.com/t/advanced-functional-programming-with-elixir-pragprog/211312/13 "2025-09-30T16:23:13Z")

</div>

> [@jvelilla](#):
>
> Really interesting book, read chap 1 and 2.

Thanks! Chapter 3 is on monoids, which is one of my favorite patterns.

---

<div class="post-metadata">

**Author:** ![JKWA](https://forum.devtalk.com/user_avatar/forum.devtalk.com/jkwa/32/7693_2.png) [@JKWA](https://forum.devtalk.com/u/JKWA)\
**Post date:** [30 September 2025 16:41 UTC](https://forum.devtalk.com/t/advanced-functional-programming-with-elixir-pragprog/211312/14 "2025-09-30T16:41:49Z")

</div>

> [@apsori](#):
>
> Hello! Would you recommend learning Haskell to understand functional programming better?

Hmm.. if you’d like a deep dive into how FP patterns are derived from first principles, then Haskell, with its origins in academia, is the best place to go. The syntax is an uphill battle, but with LLMs, some of that frustration goes away.

---

<div class="post-metadata">

**Author:** ![jaeyson](https://forum.devtalk.com/user_avatar/forum.devtalk.com/jaeyson/32/6395_2.png) [@jaeyson](https://forum.devtalk.com/u/jaeyson)\
**Post date:** [1 October 2025 01:28 UTC](https://forum.devtalk.com/t/advanced-functional-programming-with-elixir-pragprog/211312/15 "2025-10-01T01:28:26Z")

</div>

maybe this is the best time to read 🙃? too scared seeing the word “monad”

---

<div class="post-metadata">

**Author:** ![JKWA](https://forum.devtalk.com/user_avatar/forum.devtalk.com/jkwa/32/7693_2.png) [@JKWA](https://forum.devtalk.com/u/JKWA)\
**Post date:** [1 October 2025 02:18 UTC](https://forum.devtalk.com/t/advanced-functional-programming-with-elixir-pragprog/211312/16 "2025-10-01T02:18:41Z")

</div>

Monads aren’t as scary as they look. I [excerpted the start of the monad chapter](https://media.pragprog.com/titles/jkelixir/monads.pdf) if you’d like a peek. You can also lean on your LLM and the [Funx tutor](https://www.funxlib.com/tutor.html) to ask questions as you go. At their core, monads are just a structured way to handle control flow, deciding what happens next in a computation.

---

<div class="post-metadata">

**Author:** ![jaeyson](https://forum.devtalk.com/user_avatar/forum.devtalk.com/jaeyson/32/6395_2.png) [@jaeyson](https://forum.devtalk.com/u/jaeyson)\
**Post date:** [1 October 2025 03:40 UTC](https://forum.devtalk.com/t/advanced-functional-programming-with-elixir-pragprog/211312/17 "2025-10-01T03:40:20Z")

</div>

awesome! 🙏🏽

---

<div class="post-metadata">

**Author:** ![gfqdjb](https://forum.devtalk.com/user_avatar/forum.devtalk.com/gfqdjb/32/7596_2.png) [@gfqdjb](https://forum.devtalk.com/u/gfqdjb)\
**Post date:** [1 October 2025 04:29 UTC](https://forum.devtalk.com/t/advanced-functional-programming-with-elixir-pragprog/211312/18 "2025-10-01T04:29:03Z")

</div>

@JKWA This looks very interesting! What books/courses would you recommend to someone who hasn’t formally studied functional programming but wants to start from the ground up before diving into your book?

So far, two books have been mentioned in this thread:

- _Learn Functional Programming with Elixir_ by Ulisses Almeida
- _Domain Modeling Made Functional_ by Scott Wlaschin

Do you have any other recommendations? In what order would you suggest reading them?

---

<div class="post-metadata">

**Author:** ![torstenn](https://forum.devtalk.com/user_avatar/forum.devtalk.com/torstenn/32/6475_2.png) [@torstenn](https://forum.devtalk.com/u/torstenn)\
**Post date:** [1 October 2025 06:44 UTC](https://forum.devtalk.com/t/advanced-functional-programming-with-elixir-pragprog/211312/19 "2025-10-01T06:44:02Z")

</div>

Maybe not (strictly) functional but a classic worth reading is Structure and Interpretation of Computer Programs (SICP).

> **[Structure and Interpretation of Computer Programs | Electrical Engineering...](https://ocw.mit.edu/courses/6-001-structure-and-interpretation-of-computer-programs-spring-2005/)**
>
> This course introduces students to the principles of computation. Upon completion of 6.001, students should be able to explain and apply the basic methods from programming languages to analyze computational systems, and to generate computational...

---

<div class="post-metadata">

**Author:** ![jvelilla](https://forum.devtalk.com/user_avatar/forum.devtalk.com/jvelilla/32/7673_2.png) [@jvelilla](https://forum.devtalk.com/u/jvelilla)\
**Post date:** [1 October 2025 20:22 UTC](https://forum.devtalk.com/t/advanced-functional-programming-with-elixir-pragprog/211312/20 "2025-10-01T20:22:54Z")

</div>

I would like to add Introduction to Functional Programming by Richard Bird and Philip Wadler

[Next page](https://forum.devtalk.com/t/advanced-functional-programming-with-elixir-pragprog/211312.md?page=2)
