[Haskell] Re: Help : A problem with IO

abdullah abdul Khadir abdullah.ak2002 at gmail.com
Thu Nov 27 13:10:57 EST 2008


Thanks all,
                I got it working finally. What did i learn ?
a) I need to put a do after else for more than one instruction (?)
b) All similar type of questions are to be redirected to haskell-beginner
and haskell-cafe

Points noted.
Thank you once again,
Abdullah Abdul Khadir



On Wed, Nov 26, 2008 at 10:56 PM, wman <666wman at gmail.com> wrote:

> if it should really read whole line, it must try to somehow chain the
> values into the string / list of chars (using (:) )
>
> getMyLine :: IO [Char]
> getMyLine =  do
>   c <- getChar
>   if (c == '\n')
>     then return "" -- imho [] looks nicer ;-)
>     else do
>       rest <- getMyLine
>       return $ c : rest
>
> -- or
>
> getMyLine :: IO [Char]
> getMyLine =  do
>   c <- getChar
>   if (c == '\n')
>     then return "" -- imho [] looks nicer ;-)
>     else getMyLine >>= return . (c:)
>
> -- or even shorter and still equivalent ;-)
>
> getMyLine :: IO [Char]
> getMyLine =  getChar >>= (\c -> if (c == '\n') then return [] else fmap
> (c:) getMyLine)
>
>
>
> 2008/11/26 abdullah abdul Khadir <abdullah.ak2002 at gmail.com>
>
>> Hi,
>>
>>     The function getMyLine written by me is intended for getting a
>> complete string from the standard input.
>>
>> import IO
>>
>> getMyLine :: IO [Char]
>> getMyLine =  do
>>                 c <- getChar
>>                 if(c == '\n')
>>                         then return ""
>>                         else    cs <- getMyLine
>>                                 return [c]
>>
>> However I keep getting the following error:
>>
>> io.hs:14:2: Parse error in pattern
>> Failed, modules loaded: none.
>>
>>         I fail to understand what the error is. I tried out various things
>> such as changing the alignment and so on to no avail. The following program,
>> however, compiled successfully though it has the same structure as the
>> previous program.
>>
>> checkd :: IO Bool
>> checkd = do
>>                 c <- getChar
>>                 if(c=='d')
>>                         then    return True
>>                         else    return False
>>
>> Prelude> :load ./io.hs
>> [1 of 1] Compiling Main             ( io.hs, interpreted )
>> Ok, modules loaded: Main.
>> *Main> checkd
>> d
>> True
>>
>>
>> _______________________________________________
>> Haskell mailing list
>> Haskell at haskell.org
>> http://www.haskell.org/mailman/listinfo/haskell
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell/attachments/20081127/d7715dac/attachment.htm


More information about the Haskell mailing list