This is a very hazardous false equivalence, and it gets trotted out every six months or so.
There's an important difference between the items in those two sets.
If I tell you, that say, this code only cares that some type argument is a Monoid, you know how to reason about it and come away with laws you can use to check if your code is correct without having to go down to the case-by-case instantiation of that code at every possible type.
That doesn't happen if I tell you it is a Strategy. What are the laws of a Strategy? The Gang of Four sure as hell never told us any. So now I have to read the code anyways, and still reason through every possible instantiation of the types. I've gained nothing except additional onboarding time, and some vocabulary for smells and feelings.
Now it did give us, for the time, a vocabulary that was better than what we had in the imperative world. It gave us a canonical reference chapter for each golden idea, complete with a smorgasbord of options to pick and choose between judiciously written so as to not offend anybody that their precious variant on the idea wouldn't fit the mold.
But, ultimately, the GoF patterns hold for a narrow range of languages. And patterns are really about expressing thoughts your language is bad at letting you properly encode as a library. They more or less acknowledge that in the book itself. They are by definition code that some poor schmuck is stuck writing variants on over and over.
But I can write a 'Monoid' and package it up and never rewrite that code again. Most consumers of it need never care too much about the details. You can know it is safe to foldMap with (at least for finite cases) as long as you trust the implementation to be correct to the claim of being a Monoid.
Now, we do have _plenty_ of "real" design patterns in functional programming!
* encouraging `higher-kinded` data to avoid having lots of copies of near identical structure
* "boring" haskell so you don't have to teach so many new tricks and more of the language works
* some folks like to newtype all sorts of things rather than rely on them being stringly typed.
* all the machinery we use to manage masking for exceptions is right on the cusp of being a design pattern. I say that because we _do_ get to reuse the implementation that was written by God and/or @simonmar back at the dawn of time, but knowing when and why to use the mask idiom takes about the effort of reading one of the GoF chapters.
* I gave a bigger laundry list here last time the oop design patterns vs. functional programming thing came up: https://t.co/qmEiFyy9Sy
*tl;dr* FP isn't free of design patterns, but typeclasses aren't design patterns.
FUNARCH 2025 call for lightning talks is up! Come give a 5-10 minute presentation about your hexagonal architecture, or the system that you've architected in a functional language, or your experience using FP in the large!
https://t.co/kIM9usrxKI
Today is the day! Make sure you don't miss today’s deadline to submit to The Third ACM SIGPLAN Workshop on Functional Software Architecture - FP in the Large! https://t.co/8c4fGwJ4VK
#FUNARCH2025
Only a single week to go until the deadline on Monday, June 16th: Send us your paper on FP in the large - to the SIGPLAN Workshop on Functional Software Architecture! Happy Writing! https://t.co/ltXzIO8xGr
Only a little more than a month before the deadline on Mon. June 16: Send us your paper on FP in the large - to the SIGPLAN Workshop on Functional Software Architecture! Happy Writing! https://t.co/XozCdBfW9o
#FUNARCH2025
Website & CfP online for the Erlang Workshop, co-located with ICFP 2025 in Singapore. Submit your paper by 6th June! We look forward to bringing together scholars and practitioners working on Erlang, Elixir, BEAM, functional programming, and concurrency! https://t.co/rIBEDXGx7l
The Call for Papers for #FUNARCH2025 is open - deadline is June 16th. Send us research papers, experience reports, architectural pearls, or submit to the open category!
https://t.co/ltXzIO8xGr
https://t.co/8D2i5VJJJg
We've extended the deadline for FUNRARCH 2024 to June 12th.
Know something about what makes functional programming work in the large? Write it up!
https://t.co/ApCegMr5gH
"How would you explain the concept of eigenvectors to a child?" asks @JayDeep_1729. A few years ago I tried to do something like that – to explain eigenvectors intuitively, in five minutes, with no pictures, just words. https://t.co/b4Anbp5N5M
Many thanks to @PaulMBittner instrumented the final touches and pushed the manuscript through and to @EricWalkingshaw and @ThomasThuem for all their hard work and support over the last 2 years! Congrats guys!
At long last my article Variational satisfiability solving: efficiently solving lots of related SAT problems (https://t.co/X6DiVIaI44) has been published in Empirical Software Engineering! This is the most refined version of the VSAT work outside of my thesis!
Hey, if you know any people who have lost their jobs recently that you think might be a good fit at Jane Street, please DM me! Personal recommendations from people I know can cut through a lot of noise.
@lexi_lambda I’ve switched to Dvorak since last week and now clock in at around 35 words per minute. Not fast but usable. But my wrists feel so so much better. There is much less demand to move your hands in Dvorak. I’ll never go back.