2017-09-14 11 views
4

ハスケル型署名の "a"と "t"の2つの型の違いか、型 "a"と型 "b"のような唯一の違いはありますか? https://www.haskell.org/tutorial/goodies.htmlタイプハスケル型署名の型 "a"と型 "t"の違いは何ですか?

以下のように[A]に定義される:

[A]すべてのタイプA、タイプのリストの ため、からなるタイプのファミリーです。 (['a'、 'b'、 'c'])、整数リストなどのリストもすべて のメンバーです家族。 (2及び「B」の両方を含む単一の型が存在しないので、[2、「B」]は、有効 例ではないこと、しかし、注意してください。)

この定義はまた、「タイプに適用されますt?

例があるかもしれない:Haskellの型定義において

foldl :: Foldable t => (b -> a -> b) -> b -> t a -> b 
    app :: [t] -> t -> [t] 
+1

これらの記号に一致する署名にタイプ制限があるかどうかによって異なります。問題の署名を表示する。 – Carcigenicate

+3

いいえ、型制約が型制約内にない場合、これらは単に変数に過ぎません。これらの変数の名前は任意です。しかし時にはより意味のある名前が役に立つことがあります。数字のように 'n'のように。 –

+3

完全な答えではありませんが、' foldl :: Foldable t =>(b - > a - > b) - > b - > ta - > b'は同等です'foldl :: Foldable x =>(y - > z - > y) - > y - > xz - > y'と' app :: [t] - > t - > [t] 'は' app :: [u] - > u - > [u] ' – TobiMcNamobi

答えて

2

、型変数は常に小文字で始まる一方、タイプ名は常に、大文字で始まります。これらは通常a,bなどと呼ばれますが、f,m,tなどとも呼ばれます。あなたが頻繁にように、fを付し、より具体的な型変数を参照してくださいmt、および一方

は多くの場合、アルファベットの最初の文字は、無限の型変数のために使用されています。特定の例で

foldl :: Foldable t => (b -> a -> b) -> b -> t a -> b 

tは特にFoldable型クラスのインスタンスであると示されています。 t aは、aの値を保持する任意のFoldable 'container'を意味します。

あなたが他の例を見て

app :: [t] -> t -> [t] 

appは「自立」関数であれば、それは同様に、[a] -> a -> [a]を言っている場合があります。一方、appが型クラスに属している場合、その型クラス定義には、より具体的な定義tが含まれる可能性があります。

関連する問題