6

関数やデータ型などの型クラスの制約を内省することは不可能のようです。ただし、ghciはそれを行うようです。

Prelude> :t show
show :: (Show a) => a -> String

だから...どういうわけか、それを出力しているので、型クラスの制約を知っています。それはどのようにやっているのですか?

4

2 に答える 2

10

情報はインターフェイス ファイル ( module.hi) に保持されます。実行中のプログラムからアクセスするには、ファイルを見つけて読み取る必要があり.hiます ( HackageのHintパッケージがこれを行っていると思います)。バイトコードにコンパイルする過程でファイルをghci読み取るため、その情報を便利に利用できます。.hi

.hiでファイルの内容を確認できますghc --show-iface module.hi

于 2011-03-29T18:00:31.767 に答える
3

個別にコンパイルされた「バイナリ」は「.hi」ファイルです。これらには、それらを使用するコードを記述できるようにすべての型情報が含まれており、コードでそれらを使用または拡張できるように、すべての型クラス定義とすべての型クラス インスタンスが含まれています。

したがって、ghci はソースを ".hi" にコンパイルし、依存するすべての ".hi" ファイルをロードします。これにより、すべてのタイプの完全な知識が得られます。ghci が行う必要のないことは、インポートされたすべてのモジュールのソースに戻ることです。「.hi」ファイルのみが必要です。

于 2011-03-29T18:21:58.200 に答える