在评估功能应用方面,Haskell仅支持正常的订单减少,还是支持减少应用订单?我是否正确地认为正常秩序是让Haskell懒惰的原因?
答案 0 :(得分:2)
GHC运行时不使用术语缩减策略,因为这样效率非常低。实际上,GHC是一个合适的编译器,将STG机器作为其运行时的抽象机器。
但是,它实现了正常顺序降低的相同语义 - 即非严格语义。
仍然可以强制评估一些参数,如下面的应用顺序减少:
foo x y = x `seq` actualFoo x y
以上,x
会立即评估,而y
则不会。
其他常见的等效模式:
foo x y | seq x False = undefined
foo x y = actualFoo x y
-- or, with a GHC extension
foo !x y = actualFoo x y