Haskell - 从句柄读取行而不阻塞

时间:2016-01-10 13:18:00

标签: haskell concurrency io

我想要处理通过createProcess行启动的流程的标准输出,但我不能等到新行可用。我的应用程序将执行以下操作:

  1. 从某些外部程序的输出中获取所有完整的行,无需等待
  2. 启动处理这些行的作业
  3. 一旦完成作业,请等到外部程序输出的至少一行可用并重复
  4. 我不知道如何实施1.是否有相当于Handle的{​​{1}}以每行为基础运作?如果没有,Haskell™解决这个问题的方法是什么?使用hGetBufNonBlockinghReady实现自定义行缓冲或某种形式的并发?

1 个答案:

答案 0 :(得分:1)

经过一些修修补补后,我想出了这个,希望它可以帮到你:

255

你的关键功能是dealWithLine :: String -> IO () dealWithLine l = putStrLn $ l ++ "; length: " ++ (show $ length l) main = getContents >>= (\s -> mapM dealWithLine $ lines s) ,它按原样输入,没有阻塞,你可以将它提供给你想要的任何函数来处理stdin。