Issue 82 2017-11-23
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.
The GHC Team is pleased to announce a new minor release of GHC. This release builds on the performance and stability improvements of 8.2.1, fixing a variety of correctness bugs, improving error messages, and making the compiler more portable.
Using a sort of extended MTL style, with conventions for state machine encodings, gives us more type safety in state transitions. Abstract state values, impossible to create outside the instance, are now passed explicitly in state transitions.
Speaking of refactoring, we are happy that we chose Haskell, a wonderful language that enables large refactoring with ease, perhaps even turning what could be unthinkable architectural changes in other languages into pure tedium.
In part one we learned about the package database. Part two then introduced the tools and programs built when building GHC. In this part we will look at how the actual stages are built.
What did we really build in 34,000 lines of Haskell? Flexi-payment plugin, DelayedJob clone along with UI, SendGrid library, working clone of Inky to send bulletproof HTML emails, Opaleye boilerplate code-generator, and deep instrumentation wrappers over core libs.
The big idea behind
MonadIOm is that you can perform a transformation
IO a -> m a. The big idea behind
MonadBaseControlis that you can perform a transformation
m a -> IO a.
To really get good performance, we need to simultaneously optimize along two orthogonal dimensions: get more done simultaneously, by parallelizing, but also make each sequential unit of work run faster.
Instead of executing many independent
getcommands, Redis provides
mget key1 key2 ..., which will perform all the lookups at once in a single command. Which brings me to the topic of this post: is there a way to systematically construct
mgetqueries in a type-safe way?
A curious topological result in euclidean spaces is the number of possible regular polytopes in n dimensions. The series (starting with dimension 0) goes like this: 1 1 ∞ 5 6 3 3 3 …
All infix operators have precedence and associativity. A language that supports user-defined operators should also give the user a way to control these attributes for their custom operators. Modern languages do this in a variety of ways.
The Strats team at Standard Chartered are hiring again. We have openings for various roles. These will typically involve direct contact with traders to automate processes, often in rapid delivery style.
- Anki deck: Haskell lens operators
- Announcing MMark
- Continuous integration to continuous delivery Haskell project with GitLab
- Hannah: A DSL for parsing and generating files and network traces
- Haskell equality table
- materialize-hakyll: a new theme for hakyll based on material design
mega-sdist: The mega repo helper
- Øredev 2017: Ashic Mahtab: Actually Using Haskell
- Type-directed code generation
tzimtsum: A Presburger arithmetic proposition decider Haskell library
Package of the week
This week’s package of the week is Flow, a library for writing more understandable Haskell by using better operators.