假设我想从一个文件流到另一个文件,但我想跳过输入文件的前n行。如果没有先使用'fold'折叠整个第一个文件,我该怎么做?
import Turtle
main = output "/tmp/b.txt" (f (input "/tmp/a.txt"))
这里应该做什么?
ps:我没有足够的声誉来创建'haskell-turtle'标签。
答案 0 :(得分:5)
我认为这是正确的代码:
import Data.IORef
import Turtle
drop :: Int -> Shell a -> Shell a
drop n s = Shell (\(FoldM step begin done) -> do
ref <- newIORef 0
let step' x a = do
n' <- readIORef ref
writeIORef ref (n' + 1)
if n' < n then return x else step x a
foldIO s (FoldM step' begin done) )
...除了我可能称之为drop
以外的其他内容,以避免与Prelude发生冲突。
它与Turtle.Prelude.limit
几乎相同(请参阅source code进行比较)。唯一的区别是我已经撤消了then
声明的else
和if
条款。
如果这样可以解决您的问题,那么我会将其添加到Turtle.Prelude
。