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)
($ 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.
(@ 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)