Learning Haskell and FP

Benjamin L. Russell russell@brainlink.com
Wed, 03 Jan 2001 23:11:38 -0500

On Wed, 03 Jan 2001 11:26:53 -0500
 Michael Zawrotny <zawrotny@gecko.sb.fsu.edu> wrote:
> [snip]
> The reason that I found GITH difficult wasn't that the
> concept
> of programming with functions/functional style was new to
> me.  What got me was that the concepts and notations were
> much
> more "mathematical" than "programmatic".  In my
> explorations
> of various languages, my experience with introductions to
> scheme/CL has mostly been that they tend to show how to
> do
> things that are familiar to imperative programmers, plus
> all
> of the things that you can do with functions as first
> class
> values.  With intros to SML, OCaml and Haskell, there is
> a
> much greater emphasis on types, type systems, and
> provable
> program correctness.
> [snip]
> The thing that I would most like to see would entitled "A
> Practical Guide to Haskell" or something of that nature.
> [snip]
> One is tempted to come to the conclusion that Haskell is
> not
> suited for "normal" programmers writing "normal"
> programs.

How would you define a "'normal' programmer writing 'normal' programs?"  What exactly is a "'normal' program?"

(Perhaps another way of phrasing the issue is as the "declarative" vs. "procedural" distinction, since the issue seems to be that of "what is" (types) vs. "how to" (imperative expression; i.e., procedures).)

While I agree that "A Practical Guide to Haskell" would indeed be a suitable alternative for programmers from the procedural school of expression, I would caution that such an introduction would probably not be suitable for all.

If I may give my own case as an example, I studied both C and Scheme (in addition to auditing a course in Haskell) in college, and favored Scheme over C precisely because of my Scheme course's emphasis on provable program correctness.  This is largely a matter of background and taste:  my course background was relatively focused on the design and analysis of algorithms, with provable program correctness being a related topic.

Perhaps, ideally, two separate tutorials (or perhaps a single tutorial with two sections based on different viewpoints?) may be needed?  The difficulty is that the conceptual distance between the declarative and procedural schools of thought seems too great to be bridged by a single viewpoint.  It seems that any introduction favoring either one would risk alienating the other.

Personally, I would really prefer "A Gentle Elementary Introduction to Haskell:  Elements of the Haskell School of Expression with Practical Examples," but some would no doubt choose "Haskell in a Nutshell:  How to Write Practical Programs in Haskell."

Benjamin L. Russell
"Furuike ya!  Kawazu tobikomu mizu no oto."  --Matsuo Basho