什么是$!哈斯克尔的意思/做什么?

cnd*_*cnd 2 syntax haskell

语境:

do state1 <- act state
   dispatch $! state1
Run Code Online (Sandbox Code Playgroud)

是什么$!呢?

例如,为什么它不只是dispatch state1在这里?

Ørj*_*sen 7

$!严格的应用中,从差dispatch state1的是,state1保证要被评估,而不只是保持为懒惰形实转换.它被定义为

f $! x  = x `seq` f x
Run Code Online (Sandbox Code Playgroud)

以这种方式强制评估对于效率问题非常重要,例如防止内存泄漏.