2016-09-08
For the past couple of years I've been learning Haskell, and while I enjoy reading new materials in forms
of books, papers, blogs posts and even tweets, thankfully I quickly came to realize that the best way to learn is to
build things.
That's not to say I just jumped right in. I spent a long time just playing around with the language, exploring various
language features, libraries and getting to know the ecosystem in general. Not doing anything serious .
At the time that was a bit more painful than now because now-a-days there's a lot more resources and organized materials
around. The community has really stepped up!
Anyhow... Building things. I've been using docker since it was released and have grown from resident docker fan-boy to
resident expert over time. Also I've been involved with the Python API wrapper since the early days so it made sense
to try and write a Haskell API wrapper. At the time that was the closest I came to web development (the docker daemon
listens on a HTTP API) as I felt comfortable.
The first attempt was awful. But it worked! I was able to launch containers and everything. Of course, the API of the
library was horrendous. There were very little type guarantees for anything and the whole thing was just one big giant
IO blob.
Having realized this, I went on a crusade to learn all the fancy type machinery and make use of every trick and
extension under the sun. That attempt went on and off for a couple of months until I realized that I created a monster
and that I didn't need half the stuff I was using. So, having went from one extreme to the other I decided to delete
everything and start fresh. I had some guidance from a couple of friends (thank you!) and I was getting pretty close to
an API I was (more) happy with and that should be usable by most people. The library being usable was one criteria,
but the other one was that it's more or less straightforward to contribute to. The reason being that the Docker Engine
API is kind of huge at this point and I'm certainly either going to miss something, or implement it wrong, and it should
be more or less easy for anyone to go in, and contribute a bugfix or a feature. Naturally, this dragged on since
obviously I was doing this for fun and in my spare time. Thankfully, I got help somewhere along the way when James
Parker jumped in. He was instrumental in getting the library in better shape so that we can finally release that major
refactored version.
Read more…
docker
haskell