[英]Use of function application operator in Haskell
以下表达式在haskell中的含义是什么?
($ 3)
ghci显示以下类型
($ 3) :: Num a => (a -> b) -> b.
($ 3)
是一个部分,相当于\\f -> f 3
,它接受一个函数参数并将其应用于3。
如果我们认为3
是一个整数,我们会得到f
的类型是Int -> b
(对于任何b
),所以($ 3)
的类型将是(Int -> b) -> b
。
Haskell中的东西有点复杂,因为3
可以是任何数字类型,所以我们不需要f :: Int -> b
,如果f :: a -> 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
另一种看待它的方法是
($) :: (a -> b) -> a -> b
3 :: Num a => a
当你在($)
“插入3”时它就会变成
($ 3) :: Num a => (a -> b) -> b.
由于您不再需要提供a,但您需要提供的功能现在限制为num,因为3可以是任何数字类型。
这至少是我如何看待Haskell中的函数,比如代数中的替换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.