[Haskell-cafe] Maybe a, The Rationale

Don Stewart dons at galois.com
Sun May 11 22:42:47 EDT 2008

> > Maybe types force you to deal with it, while simultaneously  
> >providing convenience functions to help you deal with it.
> I readily grant that Maybe is a wonderful wonderful thing and I use it  
> freely and
> voluntarily.  BUT it should not dominate the code.
> Consider Haskell's getChar and hGetChar.  They DON'T return Maybe  
> Char; they
> raise an exception at end of file.  You have to keep testing isEOF/ 
> hIsEOF before
> each character read, as if we had learned nothing since Pascal.
> Arguably, maybeGetChar :: IO (Maybe Char) and hMaybeGetChar :: Handle - 
> > IO (Maybe Char)
> would be a good idea, at least then one could easily set up some  
> combinators to
> deal with this nuisance.

Thankfully its easy to lift IO-throwing things into a safer world.

    import Control.Exception
    import Prelude hiding (getChar)
    import qualified Prelude as P

    getChar :: IO (Maybe Char)
    getChar = handle (const (return Nothing)) (Just `fmap` P.getChar)

-- Don

More information about the Haskell-Cafe mailing list