关于haskell:$(美元)和$之间有什么区别!

What is the difference between $ (dollar) and $! (dollar exclamation point)

有人能解释一下操作工($)($!)之间haskell的区别吗?

到目前为止,我还没有看到在任何地方使用$!,但是在浏览haskell引用时,我注意到它的存在,并且它的定义与$完全相同。在haskell解释器(ghci)中尝试一些简单的语句时,我找不到任何区别,也找不到在搜索haskell tutorial时在列出的最上面的教程中对运算符的任何引用。

所以,出于好奇,有什么区别吗?


($!)是严格的功能应用。这是我的论点,它evaluates评价函数。

这是违反正常的懒惰的功能应用在Haskell中,例如f xf $ x是开始,第一,函数的参数和fx只计算,如果它是需要的。

例如succ (1 + 2)想加延时的1 + 2通过创建一thunk,和评估的succ启动第一。如果参数是一个只读访问成功,想1 + 2被加载。

然而,如果你知道一个确信的观点,我需要的功能,你可以使用($!)论点,第一,希望到弱的头正常形式,然后回车键的功能。这种方式,您don’t create a Whole of thunk大桩,这可以更高效。在这个例子succ $! 1 + 2会先计算,然后回车3succ函数。

注意,它是不总是安全的感觉replace功能正常与功能应用严格的应用。例如:

1
2
3
4
ghci> const 1 (error"noo!")
1
ghci> const 1 $! (error"noo!")
*** Exception: noo!


一个海上部队的评价函数,这一价值。美元!一个术语的定义。

这是一个博客的一些细微差别,其节目使用。