[Haskell-cafe] IO is a bad example for Monads
westondan at imageworks.com
Tue Dec 11 17:18:48 EST 2007
Hans van Thiel wrote:
> On Tue, 2007-12-11 at 16:56 +0100, Wolfgang Jeltsch wrote:
>> Maybe there are also patient people in the outside world so that we can still
>> expose Haskell to the outside world while not trying to attract
>> quick-and-dirty hackers. ;-)
> But who are those people? And what harm can they possibly do, assuming
> they fit the derogatory description?
I fear those people can do vast amounts of damage. :(
When inept programming yields the wrong result, it is clear (even to the
inept) that the program is bad.
When the result is correct but there are egregious time or space leaks,
it is "clear" to everyone but the Haskell guru that it "must" be the
programming language that is deficient, and will be duly flamed far and
wide. This perception will be impossible to reverse when it gains
traction (and nothing ever goes away on the Internet).
Seeming "deus ex machina" code changes (perhaps helpfully offered on
haskell-cafe) to minimize or correct the undesirable runtime behavior
appear even to many Haskellites to be black magic, accompanied by the
runes of profile dumps (like knowing what generation 0 and generation 1
garbage collection is).
>> Haskell is not a quick-and-dirty language but quite the opposite. Haskell’s
>> unique selling propositions are features like type classes, higher order
>> functions and lazy evaluation which make life easier in the long term. The
>> downside of these features is that they might make life harder in the short
> I don't know. In a sense Haskell is easier than, for example, C, because
> the concept of a function definition is more natural that that of
> assignments and loops. The idea that x = 5; x = x + 7 makes sense
> requires a complete new way of thinking. OK, once you've been doing it
> for a few years switching back to x = 5 + 7 is hard.
I would limit that to say that *denotational* semantic intuition is easy
to wield in Haskell. Operational semantic intuition is Haskell is very
non-obvious to the imperative (and many functional) programmers.
Making matters worse, the first is an advantage well-hyped by
functionistas, the second hurdle is rarely admitted to.
>> That said, I definitely think that we should make learning the language as
>> easy as possible. But our ultimate goal should be to primarily show
>> newcomers the Haskell way of problem solving, not how to emulate Python or
>> Java programming in Haskell.
> Again, is there a danger of that happening?
Yes. Those absent the necessary humility to approach haskell-cafe with
open mind and flame-retardant dialog will fall back on what they know:
transliterated Java/Python with a morass of do blocks and IO monads,
then (rightly) bash how "ugly" Haskell syntax is when used in this way.
This type of programmer looking to use Haskell casually should sign a
"benefit of the doubt" contract whereby they assume that any runtime
suboptimalities derive from their own coding and not from Haskell's
defects. This is the innate assumption of the curious, the
self-motivated, the clever. This is not typically the starting
assumption of the "I'm an expert at Joe-imperative language" hacker who
took 10 years to perfect his Java skills and expects thereby to jump to
at least year 5 of Haskell without effort.
I do strongly believe in stimulating the curiosity of all comers, just
not in giving the false impression that a quick read-through of a few
tutorials will let you write lightning-fast code, or know when to
abandon [Char] for something more clever, or where to insert those bangs
and fold left instead of right, and how ad hoc and parametric
polymorphism differ, and what Rank-n and existential means (and why you
can just pickle any object in Python but need to know a half dozen
abstract things including who Peano was to do the same in Haskell), and
what the heck an infinite type is, and on and on.
Haskell has definitely been teaching me some serious humility! Possibly
it is best that those not ready for that lesson might better stick with
More information about the Haskell-Cafe