
On Thu, Apr 14, 2016 at 9:35 PM, Doug McIlroy
The disdain for "pedagogical reasons" brushes aside an implicit wakeup call to the community.
I use GHC 7.10 to teach Haskell for pedagogical reasons. There is no consensus on the pedagogical virtue of the most recent changes to the compiler and base libraries, but a good portion of us happen to prefer and achieve apparently good results teaching post-AMP, post-FTP Haskell with various GHC extensions.
Hugs is attractive because it is well described and bounded, whereas Haskell realized in GHC lacks a coherent description and presents a myriad of often inscrutable faces.
Haskell 98 has many qualities that can be understood as shortcomings resulting from historical accidents, and the current realization of Haskell in GHC fixes several of those. Yet more arguable infelicities are solved by teaching to a certain set of language extensions, some even quite recent. Avoiding these problems has pedagogical benefits. Although precise, coherent descriptions are available for Haskell 98 and Haskell 2010 for reference in the Reports, the documentation shipped by GHC for many language extensions is often reasonably close in precision and coherence, as far as many students are concerned — and, more importantly, the learning process for a student rarely involves consuming a precise, coherent definition, and often involves a greater degree of experimentation and consumption of explanations aimed to teach, not to serve as reference for language implementors. I do not aim to suggest that standards are not useful —they surely are—, but standards are of limited use to many students.
Learning how to wrangle a marvelous, but cantankerous, beast should not be confounded with initiation to the insights of functional programming.
In any case, an initiation to the insights of functional programming surely must not begin with a general-purpose programming language adequate for industrial application, but rather with a discussion of the nature of functional programming supported by a review of the theory upon which it is founded: at the very least, the lambda calculus, preferably along with some basic ideas from type theory. Programming in a number of concrete languages is helpful for this: some modern descendent of LISP, perhaps some proof assistant over a functional language, and indeed, some Haskell. If these students are to become industrial practitioners, it serves them well to teach GHC Haskell to illustrate one facet of the complex industrial side of functional programming. This, indeed, is not quite adequate for the most basic bits of an initiation — and that is fine.