Issue 64 2017-07-20
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.
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.
Years ago my colleague Gustavo asked how I would represent physical units like
kg*m/s^2as types so the compiler can check that they match up and cancel correctly. F# supports this natively, but it felt weird to have it baked into the type system.
Over the last few years, I have been developing hobbes — a programming language, JIT compiler, and database system — as part of my work for Morgan Stanley. It has become a critical piece of infrastructure in our low-latency, high-volume trading applications.
NStack lets data scientists and analysts to do sophisticated data work in the cloud without a team of engineers. Come help us build the platform for composable, data-driven microservices, using a mixture of Haskell and Linux systems tech. Reply via the link or email email@example.com.
This post clarifies the distinction between
=in Haskell, which sometimes mystifies newcomers to the language. Most languages use only one symbol to assign values (such as
:=), so why does Haskell use two?
If you look at the original property-based testing library, QuickCheck, tests are very closely tied to types: The way you typically specify a property is by inferring the data that needs to be generated from the types the test function expects for its arguments. This is a bad idea.
Functional programming languages are gaining in popularity so let’s hop on that Haskell bandwagon. With Haskell, you can write clean, concise, and expressive code.
Our platonic ideal of a Haskell library is something that exports a single, coherent concept in such a way that it never needs to be reimplemented. This is not that: scraping is a dirty, error-prone, highly contingent endeavor.
This is a really nice way to specify and test effectful systems. It’s much more effective than example-testing with canned action sequences. There’s also a lot of potential for test reuse: anything implementing the same interface can use the same property.
I uploaded a new version of
monad-skeleton-0.1.4, an operational monad library. As a result of performance optimization in the new version, extensible, the extensible effects library based on it, is now much faster than the other well-known libraries.
The free monad allows you to build your own custom monad. This lets you use the do notation for whatever you want. I find that a lot of the tutorials on the Free monad have too much build-up, and it’s hard to figure out what the code should actually be at the end.
Package of the week
This week’s package of the week is language-ninja, a library for dealing with the Ninja build language.
Call for participation
- cabal: Before testing if libraries link, do a vanilla run to check if the compiler is misconfigured
- hindent: Indenting class creates syntax error
- miso: Fix 7.8, 7.6 builds
stack newcan’t be pointed at an intranet site
- text: Add
Do you have a beginner-friendly issue you want some help with? Email firstname.lastname@example.org to get it included here!