我是哈斯凯尔的新手,刚刚来到懒惰的世界。我读到seq
函数非常特殊,因为它强制使用严格的评估,以便在某些情况下更有效。但我根本无法找到seq
字面意思。也许严格评价Q * ???
答案 0 :(得分:10)
它应该提醒你“顺序”或“序列”,因为它允许程序员指定其参数的评估顺序。
答案 1 :(得分:-6)
seq
在返回第二个参数之前评估它的第一个参数。通常通过避免不必要的懒惰来提高性能。它强制评估功能。
seq :: a -> b -> b
seq _ y = y
这个函数定义包含在
#ifdef __HADDOCK__
中,所以它会 只能由haddock(文档工具)编译,而不是由 实际编译! '真实'seq在GHC.Prim中定义为seq :: a -> b -> b; seq = let x = x in x.
这只是一个虚拟定义。基本上seq是特殊的语法 特别是由编译器处理。你写了'seq评估它 第一个参数' - 但第一个定义显然不会这样做。
更多内容阅读: