【发布时间】:2013-01-06 11:39:32
【问题描述】:
我有一个输出列表的长时间运行的计算。我想在计算时从该列表中输出值。什么是一个巧妙的方法来做到这一点?
目前我使用mapM_ print 将每个值打印到 STDOUT。这对于将值打印到命令行的简单情况来说效果很好,但感觉有点笨拙且难以使用。
此外,在某些时候,我想将我的命令行输出转换为交互式可视化。我怎样才能将我的列表变成类似 FRP 的事件流?能够将其作为事件源插入现有的 GUI 框架会很棒。
重写函数以使用列表以外的其他内容是一种选择,尽管允许我按原样获取列表的解决方案是理想的。
【问题讨论】:
-
由于 Haskell 中的列表是惰性的,而
mapM_也适用于它们,我认为默认解决方案非常好。只需使用hFlush stdout来确保输出确实被刷新(如mapM_ (hFlush stdout << print)。