如何在计算列表时输出值?

Tik*_*vis 6 haskell frp

我有一个长时间运行的计算输出列表.我想在计算它们时输出此列表中的值.这样做的方法是什么?

目前我用来mapM_ print将每个值打印到STDOUT.这对于在命令行中打印值的简单情况来说效果很好,但感觉有点hacky并且难以使用.

此外,在某些时候,我想将命令行输出转换为交互式可视化.我怎么能把我的名单变成像FRP的一系列事件?能够将其作为事件源插入现有的GUI框架中会很棒.

重写函数以使用除列表之外的其他内容是一种选择,尽管允许我按原样获取列表的解决方案是理想的.

Dav*_*rak 6

这是迭代器和迭代器(如库)的工作.

使用代理库.

import Control.Proxy

runProxy $ fromListS [1..10] >-> <processing> >-> printD >-> <more> processing>
Run Code Online (Sandbox Code Playgroud)

<processing>您需要在哪里进行额外计算.

类似的问题:mapM的懒版,是Haskell的mapM不是懒惰的吗?

例如:

> labeledPrint label x = putStrLn $ label ++ show x
> runProxy $ fromListS [1..4] >-> printD >-> mapD (*2) 
                              >-> useD (labeledPrint "Second printer: ")
1
Second printer: 2
2
Second printer: 4
3
Second printer: 6
4
Second printer: 8
Run Code Online (Sandbox Code Playgroud)

如果你颠倒了应用程序的顺序<-<而不是>->那么它看起来像普通的函数应用程序.

runProxy $ useD (labeledPrint "Second printer: ") <-< mapD (*2)
                                                  <-< printD
                                                  <-< fromListS [1..4]
Run Code Online (Sandbox Code Playgroud)