
G'day all.
Quoting wren ng thornton
Most of the (particular) problems OO design patterns solve are non-issues in Haskell because the language is more expressive.
...and vice versa. Some of the "design patterns" that we use in Haskell, for example, are to overcome the fact that Haskell doesn't have mutable global state.
A number of other patterns can actually be written down once and for all (in higher-order functions like foldr, map,...) instead of needing repetition.
This is also true in many OO languages. A lot of the GoF book, for example, can be implemented as libraries in Ada or C++.
And then there are some things like monoids which fall somewhere between idiom and pearl.
"Things like monoids" are constructions from algebra. Abstract algebra and design patterns have a lot in common. They're based on the same idea, in fact: When a pattern keeps showing up, define it and give it a name so you can talk about it independently of any specific implementation. Or to put it another way, category theory is the pattern language of mathematics. Cheers, Andrew Bromage