Issue 67 2017-08-10
Subscribe now! We'll never send you spam. You can also follow us on Twitter or with our feed. Read more issues in the archives.
Welcome to another issue of Haskell Weekly! Haskell is a purely functional programming language that focuses on correctness, productivity, and expressiveness. This is a weekly summary of what’s going on in its community.
Want to see something featured in Haskell Weekly? We love contributions! Tweet us at @HaskellWeekly or open a pull request.
Wish: A trivial web browser written in Haskell
This is a demonstration program that is able to load a web page up and render it like in the early ’90s. It supports laying out text, different font sizes for headings, inline and block elements, hyperlinks, bold and italics. It supports mouse wheel scrolling, too.
On the confusing side, there are several different array libraries with overlapping feature sets, but distinct focus, strengths, and level of support, and often they have got widely different performance characteristics. This can make it hard to know where to start.
Programming as if the correct data structure (and performance) mattered
What if focusing on the correct data structure, while still understanding your algorithm, could improve maintainability and collaterally speed up execution by a factor of over 15x compared to over-engineered C# code?
5 ways to manage allocated memory in Haskell
Let’s say we have a foreign function that takes a C data structure. Our task is to allocate the structure in memory, fill in the fields, call the function, and deallocate the memory. In this article, I will explore different ways to track all the allocated pointers and free them reliably.
Alright, so I finally got time to explain the whole I/O system in stdio. The code is not production ready yet, but the big framework has been laid out. Once we figure out a way to bridge libuv with GHC’s light weight threads runtime, we got everything we want.
An explanation of higher-order unification
In order to make this code useful to others, I would like to take the time to explain exactly how it works. In this file, we will go through the unification algorithm being used and how it is implemented in the code.
Writing performant Haskell (1 of 6): Intro
This post series will serve as a guide for a few of the approaches we can take to optimize Haskell programs. We will build a small but complete Haskell package, iteratively improving on its performance.
Brittany: Haskell source code formatting tool
I am happy to (finally) announce the first Hackage release of Brittany, a configurable Haskell source code formatter based on ghc-exactprint. Brittany aims to nicely layout the code and retain empty lines and comments as they appear in the input.
We’d like to update the wider Haskell community on the state of the Summer of Haskell projects, now that the midterm evaluation has passed. We are very happy that almost everyone passed the evaluation.
Case study: Building a URL bouncer
Building a simple URL bouncer with Servant isn’t that hard, and the usual warm fuzzies you get from well-typed functions, interfaces, and code still apply.
Job opening: Compiling to categories
I have a job opening to work closely with me [Conal Elliott] (at Target Digital) on the GHC plugin described in the paper Compiling to Categories as well as on applications, including machine learning.
- Conway’s Game of Life using
- Building Haskell projects with GHC
- Implementing Clojure-like transducers in Idris
- Integrating Eta into your Scala projects
- Redirect vulnerabilities
- Stack 1.5.1 released
- Stack issue triagers
zip: An issue with linear streams
- The future is functional: Haskell and the AI-native world
- Why you should use PureScript
Package of the week
This week’s package of the week is monad-control, a library that provides lift control operations (like exception catching) through monad transformers.
Call for participation
- brittany: Quadratic run-time behaviour in size of input
- cabal: Wiki release instructions are out of date
- stack: Add
--cwdparameter to stack exec
- August 28: Compose :: Melbourne