Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
32 lines (15 sloc) 1.55 KB

#Adjunctions in Everyday Life

Rúnar Bjarnason (runarorama)



This talk introduces adjunctions, a category theory concept underlying and unifying monads, products, coproducts, algebraic data types, and folds.


All monads have adjoint functors underlying them, as do products, coproducts, algebraic data types, and folds. We'll see that adjoint functors really do arise everywhere.

Adjunctions are really about finding efficient solutions, which is something close to the hearts of software developers. When we ask either "what is the most efficient solution to this problem?" or "what is the most general problem that this solves?" we are really looking for an adjunction.

The talk will give a crash course on categories and functors, followed by lots of examples of adjunctions, a particular kind of relationship between functors that arises virtually everywhere. Then we'll discuss some practical implications. The idea of adjunctions gives us an abstract and precise concept we can leverage when designing and using libraries.


This talk assumes basic familiarity with category theory, and particularly monads, but will include a quick review.

Topics covered in this talk: categories, functors, adjunctions, monads, comonads, products, coproducts, free algebras, cofree coalgebras.


Rúnar has been doing purely functional programming in Scala for a decade, and is one of two authors of the book Functional Programming in Scala.