picking haskell back up
Back in 2012 I wrote a post † describing why I was taking some time off of Haskell. Here in 2014, after surveying the landscape and poking around in other tech, I am picking Haskell back up for a personal project.
First, taking a year or so off of Haskell hacking was a great idea. Any time you are in a rut, a change of perspective is useful. During that year I dove deep into Go, and my impression of Go is mostly positive. Go is not a perfect language, but most of the compromises it makes are for the sake of simplicity. Go will not expand your mind, but for 90% of the population stuck on inferior tools, the onramp to Go is short and the benefits are numerous. Go also has traction - you can probably get a job programming Go.
Haskell kept pulling me back though. There is something about developing with Haskell that is challenging and enjoyable. First and foremost, stepping away gave me some perspective and made me more forgiving of some of the parts of Haskell that bothered me. Other tools I looked at disappointed me in other ways; its clear that short of writing my own programming language, I will have to deal with someone else's vision.
Specific notes on the issues I raised in my previous post:
- laziness - a large and vibrant ecosystem has grown around the conduit and pipe library ecosystems, as well as others like IO-streams that address some of the core concerns with evaluation disciplines. I think the community is addressing this problem adequately.
- missing libraries - there has been a lot of activity in hackage and many of the resulting libraries seem to be of high quality. A year has made a lot of difference, and many of the libraries are great. The community deserves a pat on the back!
- function spaghetti - still an open issue but most other languages are grappling with the same problems related to abstraction and composition. Looking at java8's implementation of lambdas drove the point home - everyone has baggage.
- ghc pragmas - I've just learned to live with them.
- performance - I still think the community lies to itself regarding the performance of idiomatic Haskell, but I no longer think it is worth discussing. Many popular services get by with tools with much worse performance. I've stopped fetishizing benchmarks.
- memory use - same as above. If it really becomes an issue, I know how to use miserly tools.
- frankenstein code - I still think the Haskell community pushes out cryptic stuff. I've just made peace with most of it. Thankfully, there are a lot of people working on quality libraries that are easy to use. I feel like the number of options is getting better over time.
Some of the proactive changes I have made in my own use of Haskell focus on simplicity. I no longer go out of my way to use libraries or techniques just to keep up with the hype cycle. The truth is that most of the programs I write are relatively simplistic in the grand scheme of things, so I get by with the most obvious and idiomatic solution available.
†Yes I deleted my comments from the reddit article discussing that post. Sorry, I sometimes shoot off the cuff on reddit and feel no guilt about purging my record from time to time.
last update 2014-03-08