Bartosz Milewski

As of March 2020, School of Haskell has been switched to read-only mode.

Bartosz used to be a physicist (he has a Ph.D. in Quantum Physics) but he fell in love with programming and joined Microsoft as the development lead of the Content Index team -- the search engine before the Internet. Whenever you do a file search on Windows, you're running his code.

After Microsoft, Bartosz started his own company, Reliable Software, where he designed and helped implement the first peer-to-peer version control system, Code Co-op, which is still in commercial use.

He became an expert in C++ and published the book C++ In Action. He is best known for his blog, in which he discusses topics in concurrency, parallelism, language design, functional programming, and many other areas. He attended one C++ Standard Committee meeting on concurrency and decided that C++ was too far behind Haskell or even C# in this area. He's a frequent speaker at professional conferences on topics ranging from multicore architectures to implementing Haskell monads across languages.

He has been the architect of the FP Complete School of Haskell.

He is currently working on the book "Categories for Programmers."

You can send him email to: his first name at

  • Work in Progress

    Miscellaneous projects and unfinished tutorials This is some content that is not ready for prime time.
  • Understanding Yoneda 15 May 2013

    An abstract theorem in category theory has its applications in Haskell
  • Lenses, Stores, and Yoneda 8 Jun 2014

    Van Laarhoven lenses follow from the Yoneda lemma in the Functor Category.
  • Understanding F-Algebras 1 Oct 2013

    Writing generic code to evaluate expressions and other applications of F-algebras.
  • Basics of Haskell

    A gentle introduction to Haskell for beginners. The prerequisite for this series of tutorials is some knowledge of imperative programming, whether C++, Java, Pascal, you name it. If you have some familiarity with functional programming, that's even better. Since I came from an imperative background -- I can write some mean C++ code -- I'm familiar with the potential obstacles in embracing Haskell. There are many myths about functional programming, and Haskell in particular, that have no basis in reality. I will try to dispel them. One such myth is that you have to know advanced mathematics (category theory in particular) to be a good Haskell programmer. This is not true, and you'll find no high math in this series of tutorials. Another myth is that you can't do imperative programming in Haskell. This is technically true, in the sense that Haskell is able to reduce all imperative programming to pure functions, but in practice Haskell is the best imperative language that there is. For instance, it gives you full control over side effects. This is a nice thing in general, but it's a real life saver once you decide to write concurrent or parallel programs. In fact I was virtually pushed into functional programming by the necessities of concurrency. If the term "data race" is familiar to you, I don't need to convince you any more.
  • Basics of Yesod

    A gentle introduction to a Haskell web framework for beginners (no Haskell required) Yesod is a Haskell framework for developing web sites or, more generally, web applications. The whole FP Complete web site is a Yesod application. Already in the first tutorial you'll see how easy it is to not only create a web site, but to create a server that powers the web site. Yesod is a modern Model-View-Controller (MVC) framework, it has built-in support for interacting with databases, authentication and authorization, internationalization, Ajax and Json, and much more. Most importantly, because of the robustness of Haskell and its strong typing, web sites built using Yesod are much more reliable and require much less debugging and maintenance.
  • BoH Code

    Code and exercises for the Basics of Haskell presentation.