型シグネチャa-> b-> aとc-> a-> cの間に違いはありますか?


16

この質問は、あらゆるタイプの引数を取ることができるHaskell関数に関する理論的な質問です。の型シグネチャを持つ関数の方法に違いはありますか

a -> b -> a 

そして

c -> a -> c 

インスタンス化されていますか?どんな助けでもありがたいです。


6
いいえ、単に型変数の名前を変更しただけです。変数の名前を別の変数に変更しない限り(名前の衝突など)、問題はありません。
Willem Van Onsem

型変数が他の場所にバインドされているかどうか/方法によって異なります。
Bergi、

回答:


17

違いはありません。以来ab及びcで始まり、小文字、これらはある変数。変数の名前は変更できますが、2つ(またはそれ以上)の変数が「衝突」しない限り、これは同じままです。

このような衝突は、別の変数と同じ名前を持つように変数の名前を変更した場合、または2つ(またはそれ以上)の変数の名前を同じ新しい名前に変更した場合に発生する可能性があります。aたとえばb、最初のコードフラグメントで変数の名前をに変更すると、が取得されますb -> b -> bが、同じではありません。それにより、最初と2番目のパラメーターが同じ型であることを強制します。型シグネチャでは、同じにすることができる2つの型を自由に選択できますが、これは必須ではありません


16

いいえ。考えるa -> b -> aようにThis Type -> Another Type -> This Type。次に、それらの両方が所定のパターンに適合します。ただし、「a -> b -> c適合しない」のようなものThis Type -> That Type -> Yet Another Typeは(一般的に)異なります。エッジケースwhenを除いて、c = a興味のあるパターンを生成します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.