この質問は Haskell プログラミング言語の型に関するものです。
入力すると
:t []
私は次のように戻ります:
[] :: [a]
とは[a]
?
次のように書き直すと、物事がより明確になるかもしれません。
[] :: forall a. [a]
したがって、値が含まれていないため、haskell は型を決定できず、開いたままにします。ただし、型付き式で使用すると、
x = []
f :: [Int] -> [Int]
f l = l
y = f x
[Int]
この型として使用されるため、自動的に に解決されます。
プレースホルダーです。それは基本的に、どのタイプでもそこに行くことができることを意味します。つまり、関数があれば
someFunc :: [Int] -> ()
isが一致[]
するため、それに渡すことができます(プレースホルダーを具象型に置き換えることにより)。[]
[a]
[Int]
a
Int
たとえば、 を見ると、id
タイプが であることがわかりますa -> a
。これは、任意の型のオブジェクトを受け取り、同じ型のオブジェクトを返す関数であることを意味します。興味深いことに、関数は与えられたオブジェクトについてまったく何も知らないため (型に制約がないため)、この関数は次の 2 つのいずれかを実行する必要があることがわかります。