1. ホーム
  2. haskell

[解決済み] Rank2Typesの目的は何ですか?

2022-09-05 19:29:45

質問

私はHaskellにあまり精通していないので、これは非常に簡単な質問かもしれません。

どのような言語制限を Rank2Types はどのような言語的制限を解決するのでしょうか?Haskellの関数はすでに多相引数をサポートしていないのですか?

どのように解決するのですか?

Haskellの関数はすでに多相引数をサポートしていないのですか?

ありますが、ランク1のみです。つまり、この拡張がなくても異なる型の引数を取る関数は書けますが、同じ呼び出しで異なる型の引数を使用する関数は書けません。

例えば以下の関数は、この拡張なしでは型付けできません。 g の定義で異なる引数の型が使われているからです。 f :

f g = g 1 + g "lala"

多相関数を他の関数の引数として渡すことは完全に可能であることに注意してください。つまり、次のようなものです。 map id ["a","b","c"] は完全に合法です。しかし、その関数はそれを単相としてしか使うことができません。この例では mapid という型であるかのように String -> String . そしてもちろん,与えられた型の単純な単項式関数を id . rank2typesがなければ,関数がその引数が多相関数でなければならないことを要求する方法がなく,したがって,それを多相関数として使う方法もありません.