Issue 103

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.


  • Visualization as an aid for porting a Ruby application to Haskell

    In this post, we will outline a major difficulty in translating object-oriented Ruby to Haskell, and present a method for aiding the translation by visualizing the call graph of the Ruby code.

  • Different kinds of integer division

    This blog post will address two issues: how to decide whether a particular operation can sensibly be described as “integer division”, and why there are a few different options, and what the differences between them are.

  • Reimplementing Hackett’s type language: expanding to custom core forms in Racket

    The fundamental technique used to do so is not novel, and it seems to be periodically rediscovered every so often, but it has never been published or documented anywhere, and getting it right involves understanding a great number of subtleties about the Racket macro system.

  • How to handle asynchronous exceptions in Haskell

    We launched our monthly webinar series on Wednesday, April 11th with our first webinar on how to handle asynchronous exceptions in Haskell.

  • Stackage HEAD is now live

    By picking a nightly plan and building it using development versions of GHC at different commits, we can detect changes in the build status of packages contained in the plan, which are caused by changes in GHC, thereby detecting potential regressions in the compiler.

  • Rethinking MonadError

    The problem I see with MonadError is that it does not address the fundamental difference between these two types of instances. I can pattern match an Maybe a with a default value to get back an a. With IO that is just not possible.

  • Supercompilation for free with the abstract algorithm

    In this article, I’ll show 2 small experiments in which my 200 LOC JavaScript evaluator beats GHC by a few orders of magnitude.

  • Algorithmically scrapping your type classes

    The algorithm to desugar constraints into dictionaries hasn’t been discussed much. Since it’s rather involved, and quite interesting, I thought it might make a good topic for a blog post.

  • The monadic structure of combinatorial optimization

    Combinatorial optimization refers to assigning discrete values to a set of variables with the aim to minimize (or equivalently, maximize) a given objective function.

  • Recursion schemes, part 5: Hello, hylomorphisms

    Given the fact that we can derive an unfold from a fold (and vice versa), and given the powerful tool in our toolbox that is function composition, an important question we can ask is: “What happens when we compose an unfold with a fold?”


  • ITProTV seeking Software Developer in Gainesville, Florida

    ITPro.TV is a fast-growing digital media business that focuses on continuing education in technical domains. We are currently accepting applications for full-stack software professionals to join our small but talented multidisciplinary team.

  • Jobs at (ad)

    Lumi is a platform that helps e-commerce businesses manage their packaging supply chain. We are currently hiring backend and frontend engineers. You will work closely with Phil Freeman (creator of PureScript) and our small, distributed engineering team headquartered in Los Angeles. Remote applicants across all US time zones are encouraged!

In brief

Package of the week

This week’s package of the week is asset-bundle, a build-time Cabal library that bundles executables with assets.

Call for participation