[Haskell-beginners] Can't figure out my error here

Sumit Sahrawat, Maths & Computing, IIT (BHU) sumit.sahrawat.apm13 at iitbhu.ac.in
Thu May 28 21:14:27 UTC 2015


On 25 May 2015 at 23:12, Barry DeZonia <bdezonia at gmail.com> wrote:

> Hello,
>
> I have a small piece of code that does not compile and I'm having trouble
> figuring out why.
>
> Here is the relevant snippet:
>
> readChunks :: Handle -> [String] -> IO [String]
> readChunks handle accum = do
>   chunk <- readHeaderChunk handle
>   if isLast chunk
>     then return (accum ++ chunk)
>     else return (readChunks handle (accum ++ chunk))
>

In short, try: else readChunks handle (accum ++ chunk)

Explanation,

return :: a -> IO a (in this case)
readChunks handle (accum ++ chunk) :: IO [String]

therefore, return (readChunks handle (accum ++ chunk)) :: IO (IO [String])


> isLast :: [String] -> Bool
>
> readHeaderChunk :: Handle -> IO [String]
>
> And here is the single compiler error:
>
> hacks.hs:48:18:
>     Couldn't match expected type `[String]'
>                 with actual type `IO [String]'
>

Wanted [String], got IO [String]

    In the return type of a call of `readChunks'
>     In the first argument of `return', namely
>       `(readChunks handle (accum ++ chunk))'
>     In the expression: return (readChunks handle (accum ++ chunk))
>
> What I'm most confused about is that chunk is passed to isLast as a
> [String] with no compiler error but cannot be passed to accum ++ chunk that
> way. Or so it seems. Can someone she some light on this? Thanks.
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
>


-- 
Regards

Sumit Sahrawat
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20150529/8fe71ddc/attachment-0001.html>


More information about the Beginners mailing list