Haskell中函数应用运算符的使用
Posted
技术标签:
【中文标题】Haskell中函数应用运算符的使用【英文标题】:Use of function application operator in Haskell 【发布时间】:2017-03-24 06:01:28 【问题描述】:下面的表达式在haskell中是什么意思?
($ 3)
ghci 显示如下类型
($ 3) :: Num a => (a -> b) -> b.
【问题讨论】:
【参考方案1】:另一种看待它的方式是
($) :: (a -> b) -> a -> b
3 :: Num a => a
当你在($)
中“插入 3”时,它会变成
($ 3) :: Num a => (a -> b) -> b.
由于您不再需要提供 a,但您需要提供的函数现在仅限于 num,因为 3 可以是任何数字类型。
至少我是这样看待 Haskell 中的函数的,就像代数中的替换一样。
【讨论】:
【参考方案2】:($ 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
。
【讨论】:
【参考方案3】:(@ x)
对于任何运算符@
等价于\a -> a @ x
;所以($ 3)
等价于\f -> f $ 3
,即一个函数应用你传递给3
的任何函数。这种语法称为“节”。
> let f = ($ 3)
> f show
"3"
> f square
9
【讨论】:
以上是关于Haskell中函数应用运算符的使用的主要内容,如果未能解决你的问题,请参考以下文章