double::
はこれが Haskell であることを示唆していますが、一般的な原則はすべての ML にインスパイアされた言語で同じです (ほとんどの型理論の規則では、単一の を使用します:
)。
シンボルは、::
左辺が右辺の型を持つことを示しています。そう
1 :: Integer
->
関数型を構築します。
timesTwo :: Integer -> Integer
さらに、->
右結合です。
plus :: Integer -> Integer -> Integer
関数は整数を取り、整数を取りplus
、整数を返す関数を返します。これは 2 つの整数を取るのと同じですが、技術的には異なります (ある意味ではより単純です)。それはカリー化として知られています。
square :: Integer -> Integer
square は整数を取り、整数を返すと言います。
多くの場合、型理論や関数型プログラミング言語では型変数を利用します。
id :: forall a. a -> a
id x = x
任意のタイプのa
id は、そのタイプの値から同じタイプの別の値への関数であると言います。変数を使用してより一般的な型を.
指定すると、演算子がより意味のあるものになります
(·) :: (b -> c) -> (a -> b) -> a -> c
f . g x = f (g (x))
は関数合成関数です。引数として 2 つの関数を取る高階関数です。より形式的にはa
、 、b
、およびは、 からc
への関数から への関数からへの関数への関数です。最後の関数は、2 つの引数関数を組み合わせたものです。(.)
b
c
a
b
a
c
.
あなたは整数のみを扱うことに特化しています。でも、考え方は同じです。Integer -> Integer
とから 2 つの関数を取得しInteger
、最初の関数を適用してから、結果に 2 番目の関数を適用します。
(.)
または(+)
、「これは中置演算子ですが、今は接頭辞形式で話したい」という意味の Haskell です。
したがって、は引数に対して square を呼び出し、結果に対して再度 square を呼び出すQuad
関数です。Integer -> Integer
それは同じだろう
quad x = square (square x)
(haskell では大文字と小文字が区別され、関数は小文字で始まる必要があります)