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.