[Haskell-cafe] How Albus Dumbledore would sell Haskell

ajb at spamcop.net ajb at spamcop.net
Thu Apr 19 20:14:26 EDT 2007

G'day all.

Quoting Isaac Dupree <isaacdupree at charter.net>:

> Okay, looking at that code:
> The comments before the type definitions are mostly good...
> now it looks like I'm going into critique mode :)

BTW, for the record, I didn't try too hard with this.  It is meant
to be illustrative of what you can do with Haskell and not too much
time to spare.

I didn't haddock-ise the comments because Diff isn't a library.  The
comments are meant to be more commentary (this is a tutorial, remember!)
than developer documentation.

> Range (that is, the comment describing it) needs to say whether it's
> inclusive of its first and/or its last endpoint (in fact it is
> inclusive, I can determine by looking at the definition of rangeDist)

Fair point.

> I suppose Match is the same (inclusive), but I can't tell. And
> personally I don't know what the significance/meaning of a "found match" is.

OK, this needs explanation.  A Match is a match _between_ the two
files being diffed.  So (a,b) means that line a in file 1 matches
line b in file 2.  I'll note that, thanks.

> Comparing "data Range = Range Line Line" and "type Match = (Line,Line)",
> they are isomorphic, but declared differently (which is fine IMO)

Yup.  They only have to be different enough to cause a type error if
you accidentally try to mix them.

> The only IO that displayDiff does is putStrLn. It should probably return
> a string instead [...]

Possibly, or even use a Writer monad.  I habitually use putStrLn,
though, because I regularly program in multiple languages, and this
way I don't have to remember how Haskell handles line termination on
different platforms.

Andrew Bromage

More information about the Haskell-Cafe mailing list