2016-11-10 27 views

回答

6

(@ x)任何操作者@相當於\a -> a @ x;因此($ 3)相當於\f -> f $ 3,即應用將它傳遞給3的任何函數的函數。這個語法被稱爲「章節」。

> let f = ($ 3) 
> f show 
"3" 
> f square 
9 
8

($ 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

另一種方式來看待它是

($) :: (a -> b) -> a -> b 
3 :: Num a => a 

,當你在($)「附件3」,它將成爲

($ 3) :: Num a => (a -> b) -> b. 

給您不再需要提供到期,但是您需要提供的函數現在僅限於num,因爲3可以是任何數字類型。

這至少是我如何看待Haskell中的函數,就像代數中的替換一樣。

相關問題