1
我正在解析一個相當大的文件,並且我想定期更新一個進度條以表明迄今爲止我已經解析了多少文件。是否有一個實例流處理Text.Parsec.Stream的IO字符?
我能想到這樣做的最直接的方法是使用作爲一個單子轉換爲IO
這樣我就可以解除印刷進步黨欄更新,並使用Handle
作爲流供應商,所以我可以使用hFileSize
檢查進度和hTell
。
這意味着我需要一個實例Stream Handle IO Char
。我不應該很難推出自己的(使用hGetChar
),但我想我會看看是否已經存在,以處理任何未解決的問題(比如我是否需要插入一些緩衝以提高速度)。
另一個未解決的問題:[backtracking!](http://www.haskell.org/pipermail/haskell-cafe/2008-February/039059.html) – rampion
您可以提前查詢文件大小,只需使用通常懶惰的IO + Stream String m Char實例(它已經爲你跟蹤了一個'SourcePos')?這可能有點激動人心,但不會比你在你的問題中提出的建議更有活力。 –
Daniel Wagner:它看起來像'SourcePos'沒有追蹤絕對偏移量,只是行/列,所以我不得不預先計算行數。 – rampion