我做了一个非常耗时的算法,它产生一个短字符串作为结果。当我尝试打印它(通过 putStrLn)时,它会一个字符一个字符地显示在屏幕上。我确实明白为什么会发生这种情况,并且我尝试在实际打印之前强制评估字符串。
myPrint !str = putStrLn str
但这帮助甚微。当我在调试中运行程序时,我注意到 !str 强制仅对第一个字符进行求值。
有谁知道这是为什么,以及如何处理这个问题?
最佳答案
(!)
转换为 seq
,严格计算为 Weak Head Normal Form ——也就是说,它只计算最外层的构造函数。要更深入地评估,您需要“深度”形式的 seq
。
这称为deepseq
。
位于 the deepseq package .
关于haskell - haskell 中列表的强制严格性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5558043/