Covariance and GUIs

This week, we’ve added more reference material and new lessons to two of our ongoing courses.


We wrote a short explainer about threads. Find out what is meant by “green threads,” how Haskell’s threads relate to OS threads, and what the -threaded GHC flag means.

We realized we hadn’t discussed the term levity polymorphism in our article on Primitives, levity, and boxing. Since it’s a term you see pop up in Haskell circles from time to time – usually when the GHC developers have inadvertently exposed some runtime details in the type or kind signatures GHCi displays – we thought it was worth correcting that, so we have added a short section to that article.

The page on ScopedTypeVariables has been updated with a discussion of the second thing it does; in addition to allowing lexically scoped type variables as its name implies, it also allows pattern type signatures.


The latest lesson in the Functortown course is lesson 5 that introduces the Bifunctor typeclass. It starts with an example from a previous lesson, an example that was previously law-breaking but can be made lawful and thoroughly tame by using bimap instead of fmap. We also break down the class declaration of Bifunctor a bit and discuss what the Bifunctor documentation means by “the first and second arguments are covariant.”

Chris has the second lesson in the Timepieces series. It turns out making a clock with gtk3 involves a lot more manual widgeting than we had to do with fltkhs, so this first lesson gets us a window with centered text but not yet a clock.


Most of the reference material, albeit sometimes in condensed form, will be in the Joy of Haskell: Haskell Desk Reference. Some of the courses will be reformatted and periodically released as short books; the first of those, an improved form of the Validation course, is available as a book on Leanpub (incomplete at this time but to be finished shortly).