Issue 82

Welcome to another issue of Haskell Weekly! Haskell is a safe, purely functional programming language with a fast, concurrent runtime. This is a weekly summary of what’s going on in its community.

Want to see something featured in Haskell Weekly? We love contributions! Tweet us at @HaskellWeekly or open a pull request.


  • GHC 8.2.2 is available

    The GHC Team is pleased to announce a new minor release of GHC. This release builds on the performance and stability improvements of 8.2.1, fixing a variety of correctness bugs, improving error messages, and making the compiler more portable.

  • Finite-state machines part 2: Explicit typed state transitions

    Using a sort of extended MTL style, with conventions for state machine encodings, gives us more type safety in state transitions. Abstract state values, impossible to create outside the instance, are now passed explicitly in state transitions.

  • Anatomy of a Haskell-based application, revisited

    Speaking of refactoring, we are happy that we chose Haskell, a wonderful language that enables large refactoring with ease, perhaps even turning what could be unthinkable architectural changes in other languages into pure tedium.

  • Building GHC: The stages

    In part one we learned about the package database. Part two then introduced the tools and programs built when building GHC. In this part we will look at how the actual stages are built.

  • Joys and frustrations of putting 34,000 lines of Haskell into production

    What did we really build in 34,000 lines of Haskell? Flexi-payment plugin, DelayedJob clone along with UI, SendGrid library, working clone of Inky to send bulletproof HTML emails, Opaleye boilerplate code-generator, and deep instrumentation wrappers over core libs.

  • MonadBaseControl in five minutes

    The big idea behind MonadIO m is that you can perform a transformation IO a -> m a. The big idea behind MonadBaseControl is that you can perform a transformation m a -> IO a.

  • Parallelizing your array code

    To really get good performance, we need to simultaneously optimize along two orthogonal dimensions: get more done simultaneously, by parallelizing, but also make each sequential unit of work run faster.

  • Independent Redis query aggregation

    Instead of executing many independent get commands, Redis provides mget key1 key2 ..., which will perform all the lookups at once in a single command. Which brings me to the topic of this post: is there a way to systematically construct mget queries in a type-safe way?

  • Spheres and points

    A curious topological result in euclidean spaces is the number of possible regular polytopes in n dimensions. The series (starting with dimension 0) goes like this: 1 1 ∞ 5 6 3 3 3 …

  • Quick and easy user-defined operators with Plated

    All infix operators have precedence and associativity. A language that supports user-defined operators should also give the user a way to control these attributes for their custom operators. Modern languages do this in a variety of ways.


In brief

Package of the week

This week’s package of the week is Flow, a library for writing more understandable Haskell by using better operators.

Call for participation