# Programming Haskell doesn’t require any category theory

There seems to be a common misconception among some people new to Haskell that programming Haskell requires you to learn category theory first. Nothing could be further from the truth. Category theory is a beautifully abstract field of mathematics, but is *not at all* a requirement when you want to learn Haskell or build serious software with it.

I don’t have any formal background in mathematics, don’t know anything about category theory. I struggle a lot in reading formal writings, and I have never really understood those fancy categorical diagrams. Still, I write real-life Haskell code on a daily basis for a living. I use **monads** / **arrows** / **applicatives** / **functors** / **lenses** / **categories** / **monoids** all the time and love them. Not because I understand their theoretical foundation, but because they help me solve my day-to-day problems.

So, my advice to anyone eager to learn Haskell: please put away your category theory books and just start to write code, *write a lot of code*. Continuously think about what your code means and how it could be improved, you’ll quickly pick up on Haskell’s fancy abstractions yourself.

Haskell is a fantastic general purpose programming language that people use to write all kinds of software. Do you want to build web applications, client or server? Desktop applications using graphical users interfaces? 3D game engines using OpenGL? Build scripts to replace your Makefiles? All is possible. In Haskell you can have the performance of C and the abstraction of Prolog, it is very versatile.

The idea that is Haskell is mostly suited for a mathematical style of programming is simply wrong.

This post is a slight rewording of a well received comment on the Haskell Reddit.

Discussion on Reddit