
On Sun, 2008-02-17 at 02:46 -0500, Anton van Straaten wrote:
Colin Paul Adams wrote:
> "Cale" == Cale Gibbard
writes: Cale> So, the first version:
Cale> import System.IO import Control.Exception (try)
Cale> main = do mfh <- try (openFile "myFile" ReadMode) case mfh Cale> of Left err -> do putStr "Error opening file for reading: " Cale> print err Right fh -> do mline <- try (hGetLine fh) case Cale> mline of Left err -> do putStr "Error reading line: " print Cale> err hClose fh Right line -> putStrLn ("Read: " ++ line)
Left? Right?
Hardly descriptive terms. Sounds like a sinister language to me.
I was thinking along the same lines. Politically-sensitive left-handed people everywhere ought to be offended that "Left" is the alternative used to represent errors, mnemonic value notwithstanding.
Is there a benefit to reusing a generic Either type for this sort of thing? For code comprehensibility, wouldn't it be better to use more specific names? If I want car and cdr, I know where to find it.
Actually, it's either intentional or ironic that Colin uses the word "sinister" in his response as "Left" is etymologically related to it. See http://en.wikipedia.org/wiki/Left-handed#Negative_associations_of_left-hande... (to the extent wikipedia can be trusted) Indeed, also as wikipedia mentions, there are entire connotations with both words along the lines of how Haskell libraries use them. The benefit of reusing Either is that a) it -is- already mnemonic, b) there are several functions that operate on Eithers in the standard, there's little point in rewriting all of them just so you can say Ok or Error. That said, you often don't see too many explicit uses of the constructors of Either (as functions or patterns) in Haskell code as it is usually more convenient to use combinators (e.g. either or the monad methods) rather than explicit cases.