私はこの段落(http://www.seas.upenn.edu/~cis194/lectures/02-lists.html)に出くわしたとき、私はHaskellの上の講義ノートを読んでいた。ハスケルでタイプ消去?
をこの「思いやりではないが、」パラメトリック多型手段でどのような「パラメトリック」です。すべてのHaskell関数は型パラメータでパラメトリックでなければなりません。機能はこれらのパラメータの選択に基づいて気にしたり決定したりしてはなりません。 aがintのときには関数は1つのことを実行できず、aがBoolのときには別のことはできません。 Haskellはこのような操作を書くための機能を提供していません。この属性はパラメトリシティと呼ばれます。
パラメトリックの多くの深刻で深刻な結果があります。 1つの結果はタイプ消去と呼ばれるものです。実行中のHaskellプログラムは型情報に基づいて決定を下すことができないため、コンパイル時にすべての型情報を削除することができます。 Haskellコードを書くときの重要なタイプにもかかわらず、Haskellコードを実行すると完全に無関係です。このプロパティは、実行時に型を保持する必要のある他の言語(Pythonなど)と比較して、Haskellに大きなスピードを与えます。 (タイプ消去が速くハスケルを作る唯一のものではありませんが、Haskellは時々、Pythonのより速い20倍でクロックされる。)
は、「すべてのHaskellの関数」パラメトリックどのように私は理解していないとは何ですか? Haskellでは型が明示的/静的ではありませんか?また、タイプ消去がどのように改善するのか、実際には理解していません
コンパイル時間
ランタイム?
申し訳ありませんが、これらの質問が本当に基本的なものであれば、私はハスケルが初めてです。
EDIT:
もう一つ質問:なぜ著者は「Haskellのコードを書いているとき、どのように重要なタイプにもかかわらず、Haskellのコードを実行するとき、彼らは完全に無関係である」と言うのでしょうか?
「タイプ消去はコンパイル時間を向上させる」とは決して言いませんが、それは単に_runtime_の改善に役立ちます。 – chi
関数はパラメトリックです。型パラメータ 'a'を持つ場合、実行時にその型に基づいて' a'を検査し決断を下すことはできません。したがって、 'map'のような関数はすべての入力リストに対して一様に動作するので、実行時にリスト要素の型を維持する必要はありません。これをC#のような言語と比較すると、リフレクションによって実行時に実際のリストのパラメータタイプを取得できます。 – Lee