FP Complete

Announcing Stack 1.6.1 release

See https://haskellstack.org for installation and upgrade instructions. Note: we are releasing a bit earlier than planned due to #3624. As such, not all the binaries have been built yet, but the commonly used 64-bit binaries of Linux static, macOS, and Windows are available. In addition, the Windows installer and binary has not been codesigned (we […]

Cryptographic Hashing in Haskell

The cryptonite library is the de facto standard in Haskell today for cryptography. It provides support for secure random number generic, shared key and public key encryption, message authentification codes (MACs), and—for our purposes today—cryptographic hashes. For those unfamiliar: a hash function is a function that maps data from arbitrary size to a fixed size. […]

All About Strictness

Haskell is—perhaps infamously—a lazy language. The basic idea of laziness is pretty easy to sum up in one sentence: values are only computed when they’re needed. But the implications of this are more subtle. In particular, it’s important to understand some crucial topics if you want to write memory- and time-efficient code: Weak head normal […]

Exiting a Haskell process

This blog post was inspired by a recent Stack Overflow question. It also uses the Stack script interpreter for inline snippets if you want to play along at home. Don’t forget to get Stack first. The non trick case Here’s a non trick question: what do you think the output of this series of shell […]

Functional Programming and Modern DevOps

In this presentation, Aaron Contorer presents on how modern tools can be used to reach the Engineering sweet spot.   Do you know FP Complete At FP Complete, we do so many things to help companies it’s hard to encapsulate our impact in a few words. They say a picture is worth a thousand words, […]

Stack Issue Triagers

First, the boring, not over-the-top version: the Stack team is starting a new initiative, the Stack Issue Triagers. We’re asking for volunteers to go through the Stack issue tracker on Github and help users with support questions get moving more quickly, and alert the development team of bugs that require their attention. A more advanced […]

To Void or to void

Let’s say we’re going to be writing some code that needs to know the current time. It would be inefficient to have to recalculate the current time whenever it’s demanded, assuming we demand it more than once per second. Instead, it would be more efficient to have a variable that gets updated once per second. […]

The RIO Monad

I’d really intended to write a blog post on a different topic this week. But given that I did some significant refactoring in the Stack codebase related to a number of recent posts, let’s just knock this one out and get to other topics another time. I’ve played with the idea of a RIO (Reader […]

Announcing: the new unliftio library

For the past few years, Francesco Mazzoli and I have discussed issues around monad transformers—and the need to run their actions in IO—on a fairly regular basis. I wrote the monad-unlift library a while ago to try and address these concerns. But recent work I did in Stack on the extensible snapshots branch demonstrated some […]

Stack’s New Extensible Snapshots

NOTE This blog post made the rounds last week before the branch was actually merged and the post was still on a review server. I’m officially publishing it as the pull request is now merged. There is a collection of features in Stack that have been added in bit by bit, as opposed to being […]