For more practical examples like this, I highly recommend the Haskell Data Analysis Cookbook [1].<p>After learning the basics of Haskell, having a book chock full of practical examples of things like handling CVS files, JSON, trees, graphs, machine learning, and Haskell's outstanding support for parallel computation--is a really helpful resource. The code is extremely well written; clear, concise, and readable. The author has also put the source code on GitHub for each chapter. [2]<p>Afterwards, to take your skills to the next level, check out Simon Marlow's Parallel and Concurrent Programming in Haskell [3]. Simon now works at Facebook, where they're using Haskell in production [4] [5].<p>[1] <a href="http://www.amazon.com/Haskell-Analysis-Cookbook-Nishant-Shukla/dp/1783286334" rel="nofollow">http://www.amazon.com/Haskell-Analysis-Cookbook-Nishant-Shuk...</a><p>[2] <a href="https://github.com/BinRoot/Haskell-Data-Analysis-Cookbook" rel="nofollow">https://github.com/BinRoot/Haskell-Data-Analysis-Cookbook</a><p>[3] <a href="http://www.amazon.com/Parallel-Concurrent-Programming-Haskell-Multithreaded/dp/1449335942" rel="nofollow">http://www.amazon.com/Parallel-Concurrent-Programming-Haskel...</a><p>[4] <a href="https://code.facebook.com/posts/302060973291128/open-sourcing-haxl-a-library-for-haskell/" rel="nofollow">https://code.facebook.com/posts/302060973291128/open-sourcin...</a><p>[5] <a href="http://community.haskell.org/~simonmar/papers/haxl-icfp14.pdf" rel="nofollow">http://community.haskell.org/~simonmar/papers/haxl-icfp14.pd...</a>
Awesome article! You really cover a lot, in a short but easily digestable write-up! It might be a little fast for complete beginners though :/...<p>I've come to be quite happy with my current VIM setup. I'm using,<p>* haskellmode for _t and _T (show and insert types, respectively) [0]<p>* ghc-mod for integration with neco-ghc and syntastic and for running ghc check [1]<p>* neco-ghc [2]<p>* neocomplete that uses neco-ghc, for completion suggestions [3]<p>* syntastic for hlint checking on save [4]<p>[0] <a href="https://github.com/lukerandall/haskellmode-vim" rel="nofollow">https://github.com/lukerandall/haskellmode-vim</a><p>[1] <a href="https://github.com/eagletmt/ghcmod-vim" rel="nofollow">https://github.com/eagletmt/ghcmod-vim</a><p>[2] <a href="https://github.com/eagletmt/neco-ghc" rel="nofollow">https://github.com/eagletmt/neco-ghc</a><p>[3] <a href="https://github.com/Shougo/neocomplete.vim" rel="nofollow">https://github.com/Shougo/neocomplete.vim</a><p>[4] <a href="https://github.com/scrooloose/syntastic/" rel="nofollow">https://github.com/scrooloose/syntastic/</a>
Nicely done. I find that the most useful pedagogic tool for learning are extensively annotated non-trivial examples (with emphasis on extensively annotated).
What do you think about the lens library?<p>I have been trying Haskell for a few weeks and this library feels strange. Also I don't really think I need the things it provides. But perhaps I just don't understand it.
Great article! As a programmer yet to have tried Haskell, this was actually one of the first articles I've read about Haskell which made sense to me. I tend to have a lot easier to learn from practical examples than the more academic approach normally seen in Haskell learning material and blog posts.
Great write up, nice dissection of a simple (but not hello world simple) app, with all the ecosystem setup, etc. Apparently he is writing a book now - looking forward to that.<p>I think it is very hard to understand what a "beginner" needs - I now come across tutorials that finally make a certain concept "click", however the reason might not be that that specific tutorial was great, but rather that I have already hit my head on a bunch of other tutorials and practice that "prepared me"... Howver, Chris Allen actually working on teaching Haskell to a bunch of beginners is probably a great way of understanding what helps people to 'get it' sooner.
When it comes to learning something like Haskell you are caught in dilemma between two ideas - Should you learn a functional programming language for fun and because it will make you a better thinker? or should you use your existing tools / stack to build something better than you have done before. What will be the better utilization of time?<p>While I was more oriented to former in the past, I have been inclining to latter, lately, for the reason, that what you have built remains more obvious to show and be proud of rather than knowledge of a programming language which might not be practical to build something good for variety of reasons (not soon to say the least).
Nice article.<p>As of lately, I've been using a bundled GHC app for OSX development. Makes it quite easy to keep (and switch between) multiple Haskell environments.<p><a href="http://ghcformacosx.github.io/" rel="nofollow">http://ghcformacosx.github.io/</a>
For me, the lectures from Nishant Shukla were really helpful: <a href="http://shuklan.com/haskell/" rel="nofollow">http://shuklan.com/haskell/</a>
This is a great, well-written article. I'm going to try it out later tonight. Hopefully going through a real-life example will make LYAH a little less cryptic.
I like the How I Start serie.On the other hand,while I get that languages have their specificities,I'd like the same project to be implemented in all these languages,to be able to get a quick understanding about how working with these languages feels like.<p>You know like a TodoMVC ,but in form of tutorial around the same project,a webapp for instance,which would require as little library as possible.
This is a good series. Very few tutorial mention the dev environment setup.<p>It would be great if this can be complemented with a list of projects along with the unit/integration test cases (only description) that the end-system should pass along with a cloud deployment specification. There could be advanced section that encourages discovering edge cases.<p>When one wants to practice they can slowly climb the ladder to understand how to implement a system and gain expertise. I always find myself lacking in ideas on how to practice what I know. Practising the same set of data structures and algorithms is not very motivating.
Very interesting! Is there something like this for other languages / frameworks? I'd love to see something like this for Ruby + Sintara + MySQL/PostgerSQL for writing a RESTful API setup.