
G'day all.
Quoting Isaac Dupree
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. Cheers, Andrew Bromage