FP Complete

Asynchronous Exception Handling in Haskell

This post gives a deep dive into the Haskell exception system. If you are looking for a simpler tutorial on how to work with exceptions, I recommend our safe exception handling tutorial. Last week, I gave a webinar on the topic of asynchrnous exceptions in Haskell. If you missed the webinar, I encourage you to […]

Why Haskell is hot for cryptocurrencies

This is a short and non-technical blog post demonstrating why the Haskell programming language is a good choice for building cryptocurrencies. Cryptocurrencies are not your average software Cryptocurrencies are different from other programs in one key way: One mistake in the code can result in the instantaneous loss of all value of all users. This […]

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. This webinar was the first in what will be a monthly series covering topics in Haskell Programming, DevOps, Cloud Computing, Cryptocurrencies, FinTech, Medical Device Software, DataOps, and all the other great things we do. […]

Without performance tests, we will have a bad time, forever

Today I was working on a client project when a seemingly innocent refactoring made the program 2x faster. Of course, being happy about the improvement and going on with my life would have been wrong, as random performance improvements almost always mean that something foul is at play. I undid the refactoring step by step, […]

Best Practices for Developing Medical Device Software

At FP Complete we have experience writing Medical Device software that has to go through rigorous compliance steps and eventually be approved by a government regulatory body such as the US Food and Drug Administration (FDA). In this post we’d like to share some of the best practices and pitfalls we have learned when working […]

Hash Based Package Downloads – part 2 of 2

In our previous post, we define a common problem around reproducible build plans. The solution we desired was some form of cryptographic hash based configuration and download system for packages, package metadata, and snapshot definitions. This blog post will describe a potential concrete implementation. Federated download service Who hosts these files? Well, anyone. The level […]

Hash Based Package Downloads – part 1 of 2

This is part 1 of a 2 part series. This post will define the problem we’re trying to solve, and part 2 will go into some details on a potential storage mechanism to make this a reality. Suppose you’re working on a highly regulated piece of software. For example, something on a defense contract, or […]

Weakly Typed Haskell

I was recently doing a minor cleanup of a Haskell codebase. I started off with some code that looked like this: runConduitRes $ sourceFile fp .| someConsumer This code uses Conduit to stream the contents of a file into a consumer function, and ResourceT to ensure that the code is exception safe (the file is […]

Parsing command line arguments

There are many ways to make programs that use settings to customise their behavior. In this post, we provide an overview of these methods and some best practices. Different approaches to passing settings Settings as global state versus passing settings as an argument The first distinction to make is between passing settings as an argument […]

Building Haskell Apps with Docker

In this blog post we will show an example of how we can use Docker to build Haskell applications which we then ship inside Docker images. We will observe two cases. First, we will explore the case of developing on the same Linux distro that we are using for deployment (eg. FROM ubuntu:16.04), and then […]