2016-11-10 9 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を検討した場合、我々はfの種類ことを持っているでしょう。3.

にそれを適用しますInt -> b(任意の場合はb)なので、($ 3)のタイプは(Int -> b) -> bとなります。

Haskellでは物事は3は任意の数値タイプとすることができるので、私たちは本当にf :: Int -> bを必要としないので、f :: a -> baが数値型であるところならば、それは十分です、少し複雑です。

したがって、我々は($ 3) :: Num a => (a -> b) -> bを得る。それを見て

3

もう一つの方法は、

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

であり、あなたが($)で「3を挿入」するとき、それはあなたがもはやAを供給する必要があるため、それに

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

となり、 3には任意の数値型を指定できるので、必要な関数はnumに制限されています。

これは少なくとも、Haskellの関数を、代数の代入のように見ています。

関連する問題