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