Newsletter
Issue 96 2018-03-01
Subscribe now! We'll never send you spam. You can also follow our feed. Read more issues in the archives.
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.
Want to see something featured in Haskell Weekly? Open an issue or pull request on GitHub.
Featured
-
Build large polyglot projects with Bazel: Now with Haskell support
We have rules for building Haskell libraries (packages), binaries, tests and Haddock documentation. Libraries or binaries can freely provide C/C++ or Java targets as dependencies, or use preprocessors such as
hsc2hs
. -
Writing a game in Haskell appears to be an elusive, white-whale task. And with an existing handful of small and citable games, I wish more existed with documentation to ease the barrier of entry.
-
Validation with smart constructors
There are multiple kinds of validation; checking that values have a certain structure, which is deterministic, and things like querying a database to see if a user name is already taken, which is effectful and indeterministic.
-
I’ve been working on a toy compiler lately so I’ve been thinking about ASTs! It’s a new thing for me and I’ve gotten a bit obsessed with the idea of simplifying both the representation of the tree itself as well as the code to interpret it.
-
Hocker: I can’t believe it’s not Docker!
We’ve pulled a Docker image from a registry without using the Docker client or going through the Docker daemon. We also fetched three other artifacts of the
hello-world
Docker image that the stock Docker tooling elides from you. -
In my opinion, using the data type I’ve called
Variant
to handle heterogeneous collections is currently the best alternative. It is type-safe, efficient (both storage-wise and performance-wise) and easy to use. -
Investment strategies, lazy evaluation and memoization
This article will cover an interesting problem: given a set of possible investments, each with different tax rates, yearly rates and minimum time until withdrawal, what is the best investment strategy for the next 10, 20 or n years?
-
Introducing tenjinreader.com for Haskellers
The app is written end-to-end in Haskell. Moreover, I tried to use a bunch of new (experimental) stuff, so this blog post is about my experience.
-
Haskell with Reactive Banana and GTK3
I’ve been doing some GUI coding recently using a combination of Reactive Banana and GTK3. I started out with just GTK3, but I could see it wasn’t going to scale because everything GTK3 does is in the IO monad.
-
Comonad transformers in the wild
I’m still getting an intuition for comonads, but they seem to embody some kind of “environment”, and comonad transformers are like a “composition of environments”.
Jobs
-
Functional Programming at Mood Media in Bucharest
Mood Media is still looking for a junior/mid-level PureScript developer to work on our digital signage solution. PureScript experience is not required — any FP experience will do. The job is in Bucharest, Romania — no remote.
-
Software Engineer at Oscoin in Berlin
At Monadic, the team behind oscoin, we’re hiring our first engineers. We’re looking for experienced candidates who are well versed in functional programming and distributed systems.
-
Strat at Standard Chartered in New York
Strats are generalist software engineers. You will work on the trading floor, directly with traders, building software to automate their work and improve their efficiency.
-
Junior Developer at Holmusk in Singapore
Holmusk is a digital healthcare company based in Singapore that is focused on helping people manage chronic disease. We are building a Haskell backend team in Singapore and looking for junior developers.
In brief
- Attoparsec: The clarity of do-syntax
- GHC 8.4.1-rc1 available
- Hackage account registration changes
- I want Stackage and I only have 3 minutes until takeoff
- Liquid Haskell tutorial
- What is currying?
Package of the week
This week’s package of the week is sdl2, which provides both high and low level bindings to the SDL2 library.