在Haskell中使用函数应用程序运算符

use*_*615 3 haskell function operators function-calls

以下表达式在haskell中的含义是什么?

($ 3)
Run Code Online (Sandbox Code Playgroud)

ghci显示以下类型

($ 3) :: Num a => (a -> b) -> b.
Run Code Online (Sandbox Code Playgroud)

chi*_*chi 8

($ 3)是一个部分,相当于\f -> f 3,它接受一个函数参数并将其应用于3.

如果我们认为3是一个整数,我们将得到的类型f是Int -> b(对于任何b),所以类型($ 3)将是(Int -> b) -> b.

Haskell中的东西有点复杂,因为它3可以是任何数字类型,所以我们并不真正需要f :: Int -> b,只要数值类型f :: a -> b在哪里a就足够了.

因此,我们得到($ 3) :: Num a => (a -> b) -> b.


rig*_*old 6

(@ x)任何运营商@都相当于\a -> a @ x; 这样($ 3)就相当于\f -> f $ 3,即适用于你将它传递给任何函数的函数3.此语法称为"sections".

> let f = ($ 3)
> f show
"3"
> f square
9
Run Code Online (Sandbox Code Playgroud)