簡體   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