Cedric Fung

Co-founder of Shou

Stream the future to the present

My Road to Haskell

Jan 01, 2013

I've been trying to learn Haskell for about 1 month. Before Haskell, I've written OO programs with Java and Ruby for about 3 years, and I have also created several large projects with C, but never tried to learn a functional programming language.

At the present stage, I've grasped a few clues to adapt myself to functional programming concepts, and written several useful softwares for myself. But I'm still a newbie, at least, I can't find the proper situations to use many advanced features of Haskell though I've understood them from books, or even can't distinguish the actual differences between functional programming and imperative programming.

However, I don't think Haskell difficult to learn. Believe or not, Haskell is much easier to understand than most mathematic theories and much much easier to remember than English grammers and vocabularies for a non-native English speaker.

Join the community

Before learning something, I'd love to involve myself to its community to get familiar with the best practice or common manner to use it.

I was shocked by the passionate members of Haskell community as soon as joined the Haskell mail lists, everyone's post will be replied by very useful anwsers in just several minutes.

Now the mail list has been playing an important part in my Haskell study, I will find many useful tips of some features, and avoid some common mistakes reported by other learners.

Choose a proper guide

I've only read Learn You a Haskell for Great Good for two times, and haven't read any other books yet. I think the first 8 chapters have covered the most commonly used syntaxes and specifications of Haskell. Most important, it's quite easy to understand.

The remained chapters about IO, Functor or Monad are just several advanced concepts based on some simple mathematic theories and Haskell best practices. I spent about 1 day to learn these chapters, while taking a glance at some other related articles, such as Wikipedia.

I also plan to read the Real World Haskell when I have enough time, but prefer to treat it as a reference book for now.

Write, write and write

Nothing is better than practice to remember and master sth, at least for me. In the past one month, I use Haskell instead of bash script as the most common tool to deal with many issues. For example, to rename some files recursively, to modify many music files' meta tags, or to download an HLS video.

The H-99 and Project Euler are two interesting resources to practice a new programming language. I would solve a few problems everyday or rework my previous solutions use some new Haskell features.

Resources

  1. Haskell.org. This is the most useful official website for a programming language, everybody could get many information from it, whether a beginner or master.
  2. Learn You a Haskell for Great Good. Almost everyone is recommending it, so do I. I had spent about 3 days to finish read it up, every chapter is so easy to follow, never stucked.
  3. Getting started with Haskell from SO. Though this question is closed, the accepted anwser is very deserved to read.
  4. Wikipedia. There're many fine organized pages to read there. For example, beginning from the monad page, I followed many links to recall my memory to several mathematic theories and enhance the comprehension to the monad concept.
  5. Hoogle. You can find almost anything in Haskell libraries, such as +, List. I prefer to look up the module and data definitions and functions before trying to write something new.

Finally

My most works are related to Web or Android programming, but I haven't find any mature Haskell solutions in these domains. No Haskell web frameworks can compete with Rails or Sinatra, and GHC doesn't support ARM platform as the offical statement.

However, I can use Haskell to implement some algorithms quickly, or do some performance sensitive part of the Web application. Maybe I could improve the Web framework or port GHC to Android, hah, kidding now.

I'm just a beginner to Haskell for actual a few days study, but can't stop myself from spreading the excitement to this programming language. I'm sure I will also try to anwser questions in mail list in some day.