Issue 97

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? Open an issue or pull request on GitHub.


  • Queryparser, an open source tool for parsing and analyzing SQL

    Queryparser was originally conceived by an Uber engineer who was a Haskell enthusiast, and it quickly gained traction with several other engineers. In fact, many of us learned Haskell specifically to develop in it.

  • Implementing a safer sort with linear types

    Just by changing the arrow types in our functions to linear arrows, we are able to get additional guarantees that are enough to prove that the returned result is a permutation of the input.

  • Compact regions: Success, failure, and questions

    At Front Row, we’ve been following the development of compact regions with much anticipation. Our API servers contain a cache of static data that is a perfect use case for this GHC feature.

  • Making a text adventure in Haskell: Part 1

    I decided to make a text adventure from scratch for my second Haskell project. Text adventures, which are one kind of interactive fiction, are games which are played entirely on a command-line terminal and are require only standard I/O.

  • Deploying Haskell programs

    Heroku is the free and convenient solution for this. It is a hosting service that allows pushes to a Github master branch to trigger redeploys, and it also caches dependencies so that subsequent redeploys are fast.

  • Object oriented programming in Haskell

    For some problem domains this way of modeling is extremely suitable, and so one may wonder if we can take a similar approach in a purely functional language like Haskell, without losing purity.

  • MonadFix and the lazy and strict State monad

    After investigating this problem, I figured out that replacing the strict state monad by the lazy state monad solved the problem and lead to the expected behavior instead of an infinite loop.

  • GHC can output profiling information as JSON and you should use it

    You should start using -pj if you’re using GHC profiling. Better, you should (re)write tools to work with this format instead of the awful ad-hoc parsing that existing tools do.

  • How QuantifiedConstraints can let us put join back in Monad

    In order to better understand why adding join to Monad interacted so poorly with GeneralizedNewtypeDeriving, we must first take a detour into roles, the mechanism which underlies GHC’s notion of type-safe coercions.


  • Functional programmers at QFPL in Brisbane

    We are currently seeking functional programmers to fill five vacancies. These roles span early-career through to senior software engineer roles. In these roles, you will develop open-source software using functional programming with an emphasis on application to industry problems.

  • Senior Software Engineer at Azara in Boulder

    Azara is Looking for full-time senior software engineer to join our quickly growing team in beautiful Boulder, Colorado. We value passion for software over all other traits, and want someone ready to jump into any part of our web or mobile app.

  • Software Engineer at Urbint in New York

    Urbint engineering is building a cutting-edge data ingestion and machine learning pipeline for exposing the hidden intelligence within urban data. We are a team of close-knit, talented engineers who obsess over problem solving, code quality and workflow.

In brief

Package of the week

This week’s package of the week is named, a lightweight library for named function parameters based on overloaded labels.

Call for participation