Issue 57 2017-06-01
Welcome to another issue of Haskell Weekly! Haskell is a purely functional programming language that focuses on robustness, concision, and correctness. This is a weekly summary of what’s going on in its community.
Almost five months ago, I wrote a blog post about my new programming language, Hackett, a fanciful sketch of a programming language from a far-off land with Haskell’s type system and Racket’s macros. […] Hackett is not only real, it’s working, and you can try it out yourself!
Why don’t we do this all the time, when Haskell is at least a serviceable imperative language? Because writing imperative programs is hard! They don’t compose as well, have less useful type signatures, and are harder to reason about. Getting away from those things is why we have Haskell to begin with!
Finally launching and running the application on the device, we are greeted with “Hello from Haskell”. While the utility of this application is certainly questionable it illustrates the essential steps required to build, link and run an Android application calling a native Haskell function.
If you’re a programmer now, there’s one reality you’d best be getting used to. People expect you to know how to deal with big data. The kind of data that will take a while to process. The kind that will crash your program if you try to bring it all into memory at the same time.
Wire is an open source, end-to-end encrypted messenger for personal and business use. For our development center in Berlin we are hiring two Backend Haskell Developers. As Software Developer Backend Operations you will maintain our infrastructure, ensuring that it runs 24/7. Check out our jobs at wire.com/jobs and our open source code on github.com/wireapp.
These dialogues somewhat pedantically dissect what we mean when we say a type is an instance of a type class or a type has an instance of a type class and why. Through the course of conversation, we touch on the nature of types, type constructors, and type classes, which led to us talking about math, set theory and category theory, and what they have to do with types and type classes.
Parsing options is not the hardest problem. However, if you do not create a pattern the rest of your team can follow, your program can become a tangled mess of random file reads, environment variable lookups and unpredictable defaulting. The
Monoidclass is a rock solid abstraction for combining options.
That works, but it’s far from inspiring. We’re declaring a
Colordata type simply for the purpose of writing a type class instance. But it feels pretty heavyweight to have to declare a data type and make a type class instance for just one use site.
Packages of the week
Several interesting packages were announced this week. Instead of picking one to feature, all four are this week’s packages of the week!
- double-pendulum-simulation simulates and renders a double pendulum system.
- legion implements a simple block chain server that synchronizes nodes over the network.
- prettyprinter aims to end the Wadler/Leijen zoo dilemma by being a modern, well-documented pretty printer.
- sitepipe generates static sites with plain values and less magic.