我认为我从根本上误解了如何使用 Netwire 解决此类问题:
我有以下测试用例:
我想拿一个字符串,把它分成几行,打印每一行,然后退出。
我缺少的部分是:
- 如何在管道中的早期值之后禁止,但是如果该值被拆分并且稍后产生结果,则在所有这些结果被消耗之前不禁止。
- 主循环函数应该是什么样子
- 如果我应该使用“一次”
这是我到目前为止的代码:
import Control.Wire
main :: IO ()
main = recur mainWire
recur :: Wire () IO () () -> IO ()
recur a = do
(e,w) <- stepWire a 0 ()
case e of Left () -> return ()
Right () -> recur w
mainWire :: Wire () IO () ()
mainWire = pure "asdf\nqwer\nzxcv"
>>> once
>>> arr lines
>>> fifo
>>> arr print
>>> perform
这将输出以下内容:
"asdf"
然后退出。如果我删除once
,则程序按预期执行,永远重复输出完整的行列表。
我想要以下输出:
"asdf"
"qwer"
"zxcv"
我敢肯定,我只是在这里缺少一些关于使用 Netwire 解决此类问题的正确方法的直觉。