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

Barry DeZonia bdezonia at gmail.com
Mon May 25 17:42:35 UTC 2015


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))

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]'
    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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20150525/19f59dd4/attachment.html>


More information about the Beginners mailing list