Dan*_*ner 36
有很多方法可以严格控制懒惰的东西.您可以:
seq或其近亲($!).BangPatterns.更多信息在这里.
ert*_*tes 17
你无法关闭懒惰,因为Haskell的I/O系统依赖于它.没有懒惰的评估,这个程序会在没有输出任何内容的情况下进入繁忙的循环:
main = forever (putStrLn "Hello!")
Run Code Online (Sandbox Code Playgroud)
这是因为forever c是一个无限的程序.通过延迟评估,仅在运行下一条指令时计算程序.如果你关闭懒惰,每个功能都变得严格,包括(>>),这基本上使forever功能发散:
forever c = let cs = c >> cs in cs
Run Code Online (Sandbox Code Playgroud)
但是,您可以向构造函数和模式添加严格注释.当函数是严格的时,它的参数被强制作为结果评估的一部分,而与是否需要参数无关.这类似于急切的评价.
Dav*_*rak 11
除了Daniel Wagner列出的内容之外,您可能还想看一个类似的问题是否有使用严格评估的Haskell编译器或预处理器?.
主要的建议是使用分析工具并学习如何优化Haskell,因为大多数人认为它是一种不同的语言,关闭了非严格的评估.
有一个名为pH的Haskell变体(http://csg.csail.mit.edu/projects/languages/ph.shtml),它使用了急切的评估,同时仍然提供非严格的语义.Haskell报告谨慎地说它是一种非严格的语言.懒惰是描述并显然实现非严格性的明显方式.
因此,如果您的问题是"我们可以使用不同的评估系统,同时保持非严格的语义",那么您可以查看pH值.如果您的问题是"Haskell的版本是否共享表面语法但默认情况下是严格的",我认为它已被其他答案所覆盖.