0

この質問は Haskell プログラミング言語の型に関するものです。

入力すると

:t []

私は次のように戻ります:

[] :: [a]

とは[a]?

4

2 に答える 2

12

次のように書き直すと、物事がより明確になるかもしれません。

[] :: forall a. [a]

したがって、値が含まれていないため、haskell は型を決定できず、開いたままにします。ただし、型付き式で使用すると、

x = []

f :: [Int] -> [Int]
f l = l

y = f x

[Int]この型として使用されるため、自動的に に解決されます。

于 2012-04-27T06:26:21.233 に答える
5

プレースホルダーです。それは基本的に、どのタイプでもそこに行くことができることを意味します。つまり、関数があれば

someFunc :: [Int] -> ()

isが一致[]するため、それに渡すことができます(プレースホルダーを具象型に置き換えることにより)。[][a][Int]aInt

たとえば、 を見ると、idタイプが であることがわかりますa -> a。これは、任意の型のオブジェクトを受け取り、同じ型のオブジェクトを返す関数であることを意味します。興味深いことに、関数は与えられたオブジェクトについてまったく何も知らないため (型に制約がないため)、この関数次の 2 つのいずれかを実行する必要があることがわかります。

  1. 入力オブジェクトを返す、または
  2. ⊥ () を返します。
于 2012-04-27T06:20:54.077 に答える