上下文:
do state1 <- act state
dispatch $! state1
$!
做什么?
例如,为什么这里不仅仅是dispatch state1
?
$!
是严格的应用程序,与dispatch state1
的区别在于state1
保证被评估,而不仅仅是作为一个懒惰的thunk。它被定义为
f $! x = x `seq` f x
以这种方式强制评估对于效率问题可能很重要,例如防止内存泄漏。