繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM