> It seems like the line numbers could be a bit more accurate: > > ./Network/Yogurt/IO.hs:54:3: Use liftM > Found: > rec >>= return . (c :) > Why not: > liftM (c :) rec > > Where the code is: > > 50 -- Waits for input, but once the first character is read, waits > 51 -- no longer than the specified number of ms before giving up. > 52 hGetImpatientLine :: Handle -> Int -> IO String > 53 hGetImpatientLine h patience = rec where > 54 rec = do > 55 c <- hGetChar h > 56 if c == '\n' > 57 then return [c] > 58 else do > 59 b <- hWaitForInput h patience > 60 if b > 61 then rec >>= return . (c:) > 62 else return [c] > > I imagine it could have told me to look at line 61 right away.
You can blame HSE in this case, it only stores line numbers for certain constructs, and expressions are not among them. The closest predictable construct for this case is the RHS of the function definition, which is why you get line 54. This is something I hope to improve in HSE over time. Cheers, /Niklas _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe