front matter
Many introductory books on Haskell are out there, as well as lots of online tutorials, so the first steps in learning Haskell are readily available. But what happens after that? Haskell has a low “floor” (anyone can learn elementary Haskell) but a stratospherically high “ceiling.” Haskell is a uniquely malleable medium: its support for abstraction, thorough algebraic data types, higher kinds, type classes, type families, and so on is remarkable. But this power and flexibility can be daunting. What are we to make of the following:
traverse :: Applicative f => (a -> f b) -> t a -> f (t b)
What are f and t? What on earth does this function do? What is Applicative, anyway? It’s all too abstract!
Becoming a power user of Haskell means getting a grip on abstractions like these, not as a piece of theory, but as living, breathing code that does remarkably useful stuff. As we learn these abstractions and see how they work, we realise they are not baked in—they are just libraries—so we can build new abstractions of our own, implemented in libraries.