Preface for unaware When you install a particular version of GHC on your machine it comes with a collection of “boot” libraries. What does it mean to be a “boot” library? Quite simply, a library must be used for implementation of GHC and other core components. Two such notable libraries are base and ghc. All […]
tl;dr: I’m moving towards recommending that hpack-using projects store their generated cabal files in their repos, and modifying Stack and Pantry to more strongly recommend this practice. This is a reversal of previous recommendations. Vote and comment on this proposal. Backstory Stack 2.0 switched over to using the Pantry library to manage dependencies. Pantry does […]
Fixed point decimal numbers are used for representing all kinds of data: percentages, temperatures, distances, mass, and many others. I would like to share an approach for safely and efficiently representing currency data in Haskell with safe-decimal. Problems we want to solve Floating point I wonder how much money gets misplaced because programmers choose a […]
When deciding which language to use to solve challenges that require heavy concurrent algorithms, it’s hard to not consider Haskell. Its immutable and persistent data structures reduce the introduction of accidental complexity, and the GHC runtime facilitates the creation of thousands of (green) threads without having to worry as much about the memory and performance […]
Teaching Haskell with Duet Teaching Haskell to complete beginners is an enjoyable experience. Haskell is foreign; many of its features are alien to other programmers. It’s purely functional. It’s non-strict. Its type system is among the more pervasive of other practical languages. Simple at the core Haskell’s core language is simple, though. It shares this […]
Before getting started: no, there is no such thing as an async exception in Rust. I’ll explain what I mean shortly. Notice the comma in the title :). GHC Haskell supports a feature called asynchronous (or async) exceptions. Normal, synchronous exceptions are generated by the currently running code from doing something like trying to read […]
This post is aimed at Haskellers who are roughly aware of how build infrastructure works for Haskell. But the topic may have general audience outside of the Haskell community, so this post will briefly describe each part of the infrastructure from the bottom up: compiling modules, building and configuring packages, to downloading and storing those […]
Casa stands for “content-addressable storage archive”, and also means “home” in romance languages, and it is an online service we’re announcing to store packages in a content-addressable way. It’s the natural next step in our general direction towards reproducible builds and immutable infrastructure. Its first application is use in the most popular Haskell build tool, […]
Haskell Support in Mainstream IDEs I’ve tested out the Haskell support of the top mainstream IDEs. Here’s a rundown of the current state of things. As a dyed-in-the-wool Emacs hacker I’ve never used any of the more recent mainstream IDEs, so I can probably offer an unbiased review of the support provided by each. Note: […]
This is a story about how some bad API design on my part caused some ugly race conditions that were very tricky to break down. I’m writing this story as a word of warning to others! The code itself was written in Haskell, but the lessons apply to anyone working with Unix-style processes. Introducing typed-process […]