[Haskell-beginners] Maybe and IO

Stephen Blackheath [to Haskell-Beginners] mutilating.cauliflowers.stephen at blacksapphire.com
Sun Dec 27 16:05:44 EST 2009


Didier,

See below...

legajid wrote:
> Hi,
> My purpose is to get data from the keyboard and return a maybe value,
> saying "nothing" if the data entered is invalid.
> I get  a message "could'nt match expected IO Integer against inferred
> type maybe integer" on line x<- getdata
> Why should x be Maybe ? getdatanum is, but getdata is not.
> 
> Is it possible to write only one function rather than 2 distinct ones ?
> 
> Thanks for your help,
> Didier.
> 
> 
> Here's my code
> 
> getdata ::  IO Integer
> getdata=do      x<-getLine
>    let xn=read x ::Integer
>    return xn
> 
> getdatanum :: Maybe Integer
> getdatanum = do
>    x <- getdata
>    {-
>    if x < 5
>      then do
>        return (Just x)
>      else do
>        return Nothing
>    -}
>    return (Just x)

The type of getdatanum should be IO (Maybe Integer).  Maybe and IO are
both monads, and that's why the error messages can be a bit confusing
sometimes.

Yes, you certainly can write this as one function.


Steve


More information about the Beginners mailing list