Monads in Swift

A very short explanation

Last year, many people have dipped their toes into functional programming. Unfortunately, one of the side-effects of learning functional programming is a great amount of people trying to explain monads. Many explanations I've seen were bad and only add to the existing confusion. This makes me quite upset sometimes.

So here's my very short (and slightly simplified) explanation:

If you can define flatMap for a type, the type is often called a monad.

For example, you can define flatMap for Array. Array is a monad. You can define flatMap for optionals. Optional is a monad. You can also define flatMap for other types, such as functions, tuples, reactive cocoa signals, the Result type, and many more. Defining flatMap for a type often is really useful, even if it's not "officially" a monad. That's really all there's to it.

If you care for a longer explanation in Swift, then Alexandros's articles are pretty good. If you prefer video, have a look at John Gallagher's talk. Finally, if you like reading books, you can read my book Functional Programming in Swift or Learn You a Haskell.