[Haskell-cafe] Re: Comments from OCaml Hacker Brian Hurt

Apfelmus, Heinrich apfelmus at quantentunnel.de
Fri Jan 16 06:51:07 EST 2009

Thorkil Naur wrote:
> Peter Verswyvelen wrote:
>> It is rather funny. When we are young kids, we learn weird symbols like
>> A B C  a b c 1  2  3
>> which we accept after a while.
>> But Functor, Monoid or Monad, that we cannot accept anymore. Why, because
>> these are not intuitive? Are the symbols above "intuitive"?
> I think there is a simple explanation of this: Consider the amount of time you 
> spent, as a young kid, to learn to get used to these funny 1, 2, a, b, x, y, 
> +, - and so on. I haven't got the exact schedules from school, but my 
> impression is that we are talking about hours and hours of drill and 
> practice, over weeks, months, years.
> So, to learn to become familiar and effective in using new and complex 
> concepts, we should just accept that it sometimes may take a while. And 
> that's it. It is all a matter of practice, exposure, and guidance.

That's a highly relevant wisdom! Learning something new needs practice /
time and good tutors / books / guidance. It doesn't matter whether the
new thing is "alphabet", "summation", "boolean", "programming" or "monoid".

Obviously, those who know what a monoid is have already invested years
of time practicing mathematics while those that even attack the name
"monoid" clearly lack this practice. It's like peano virtuosoes compared
to beginning keyboard pressers.

Concerning the question whether it is necessary to invest at least some
time on mathematical practice to learn Haskell, the answer is yes. There
is no shortcut to learning purely functional programming and reasoning.
Renaming "monoid" to "appendable" and "monad" to "warm fuzzy thing" are
but useless cosmetic changes that don't make anything easier.

How to learn? The options are, in order of decreasing effectiveness

  university course      teacher in person
  book                   irc
                         mailing list
  online tutorial
  haskell wiki
  haddock documentation

Usually, the best thing is to have a teacher, i.e. to go to a good CS
course on Haskell. Books and #haskell or the mailing list are a good
substitute, but require self-discipline. Both teachers and books cost
money, but you get what you pay for, the online tutorial, wiki and
haddock worlds are too messy to be effective until very late in the
learning process.

In particular, monoids are defined and used in

  Richard Bird.
  Introduction to Functional Programming using Haskel (2nd edition).

I think that this book is a good benchmark for measuring the amount of
practice to be invested in learning Haskell.

H. Apfelmus

More information about the Haskell-Cafe mailing list