在Haskell中更好的数据流读取

Tim*_*rry 2 haskell stream

我试图解析一个输入流,其中第一行告诉我有多少行数据.我最终得到以下代码,它可以工作,但我认为还有更好的方法.在那儿?

main = do
    numCases <- getLine
    proc $ read numCases

proc :: Integer -> IO ()
proc numCases
     | numCases == 0 = return ()
     | otherwise = do
         str <- getLine
         putStrLn $ findNextPalin str
         proc (numCases - 1)
Run Code Online (Sandbox Code Playgroud)

注意:该代码解决了Sphere问题https://www.spoj.pl/problems/PALIN/,但我认为发布其余代码不会影响对此处操作的讨论.

dav*_*420 7

使用replicatesequence_.

main, proc :: IO ()

main = do numCases <- getLine
          sequence_ $ replicate (read numCases) proc

proc = do str <- getLine
          putStrLn $ findNextPalin str
Run Code Online (Sandbox Code Playgroud)

sequence_获取一系列动作,并按顺序依次运行它们.(然后它会抛弃结果;如果你对动作的返回值感兴趣,你可以使用sequence.)

replicate n x制作一个长度列表n,每个元素都是x.因此我们使用它来构建我们想要运行的操作列表.