web-dev-qa-db-ja.com

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

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

a -> b -> a 

そして

c -> a -> c 

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

16
Dreana

違いはありません。 abおよびc小文字で始まるため、これらは変数です。変数の名前は変更できますが、2つ(またはそれ以上)の変数が "clash"でない限り、これは同じままです。

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

17

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

16