Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 使用Netwire从值生成列表_Haskell_Netwire - Fatal编程技术网

Haskell 使用Netwire从值生成列表

Haskell 使用Netwire从值生成列表,haskell,netwire,Haskell,Netwire,我认为我基本上误解了如何使用Netwire解决此类问题: 我有以下测试用例: 我想拿一个字符串,把它分成几行,打印每一行,然后退出 我缺少的是: 如何在管道早期的某个值之后禁止,但如果该值被拆分,并且随后生成结果,则在所有这些结果被消耗之前不禁止 主循环函数应该是什么样子的 如果我用“一次” 以下是我目前掌握的代码: 导入控制.Wire main::IO() 主=重复主导线 递归::Wire()IO()->IO() 重复a=do (e,w)返回() 右()->recurw mainWire:

我认为我基本上误解了如何使用Netwire解决此类问题:

我有以下测试用例:

我想拿一个字符串,把它分成几行,打印每一行,然后退出

我缺少的是:

  • 如何在管道早期的某个值之后禁止,但如果该值被拆分,并且随后生成结果,则在所有这些结果被消耗之前不禁止
  • 主循环函数应该是什么样子的
  • 如果我用“一次”
以下是我目前掌握的代码:

导入控制.Wire
main::IO()
主=重复主导线
递归::Wire()IO()->IO()
重复a=do
(e,w)返回()
右()->recurw
mainWire::Wire()IO()()
主线=纯“asdf\nqwer\nzxcv”
>>>一次
>>>arr线
>>>先进先出
>>>arr打印
>>>表演
这将产生以下结果:

"asdf"
然后退出。如果我删除
一次
,那么程序将按预期执行,永远重复输出完整的行列表

我想要以下输出:

"asdf"
"qwer"
"zxcv"

我敢肯定,我在这里缺少了一些直觉,无法正确处理Netwire这类问题。

注意:这是针对较旧版本的Netwire(在事件像现在这样工作之前),因此需要对代码进行一些翻译,才能使其在当前版本中正常工作


如果我没弄错的话,你想要一根能产生线的线,然后在处理完后禁止它?这有点难说

一次
顾名思义,只产生一次,然后永远禁用。同样,您的电线在做什么有点不清楚(因为您没有告诉我们),但这不是您通常放在“主”电线上的东西(到目前为止,我只在
中使用过一次
,然后再使用

如果这是正确的,我可能会按照以下思路来做:

produceLines s = produceLines' $ lines s where
  produceLines' [] = inhibit mempty
  produceLines' (l:ls) = pure s . once --> produceLines' ls
(你可以把它写成折页之类的东西,我只是觉得这更清楚一些)

-->
对于
来说很漂亮,如果你不知道的话。基本上,这会将传递的字符串拆分为多行,并将它们转换为一条导线,该导线会生成第一行一次,然后其行为类似于一条导线,除非删除了第一个元素。一旦生成所有值,它将无限期地禁用

这就是你想要的吗

更新 我明白你现在想做什么了

你试着写的电线可以按如下方式完成

perform . arr print . fifo . ((arr lines . pure "asdf\nqwer\nzxcv" . once) --> pure [])

括号中的部分在一瞬间产生[“adf”、“nqwer”、“nzxc”]
,然后永远产生[]。fifo从上一个连接中获取值,在每个实例中添加上一个连接的结果(因此,我们必须继续生成[])。剩下的就如你所知(我使用函数式符号而不是箭头符号,因为我更喜欢它,但这对你来说应该不是问题)。

我找不到你正在使用的电线。请您添加相关的导入,或者如果它们是您自己的函数,请包含它们,以形成整个示例?我不认为我在这里遗漏了任何导线定义。我正在使用netwire-4.0.7。谢谢你的编辑Dan。这当然达到了我的目的:)我想我需要查看嵌套的电线。