2011-09-17 5 views
2

単純なモジュールTestModule.hsを作成します。これにはエクスポートされたトップレベル定義testval = 2が1つ含まれています。コンパイルして、TestModule.oTestModule.hiを作成します。 I TestModule.hsを削除します。あなたが見ることができるようにTestModuleがスコープ内にないと私はtestvalにアクセスすることができない、GHCiを使用して、ソースコードにアクセスしないでモジュールをロードする

~ λ ghci TestModule.o 
GHCi, version 7.0.3.20110517: http://www.haskell.org/ghc/ :? for help 
Loading package ghc-prim ... linking ... done. 
Loading package integer-gmp ... linking ... done. 
Loading package base ... linking ... done. 
Loading package ffi-1.0 ... linking ... done. 
Loading object (static) TestModule.o ... done 
final link ... done 
Prelude> 

:私は、このように、ghciTestModule.oをロードします。どうして?ソースファイルにアクセスせずにこれをどのように達成できますか?

その他の質問:hintパッケージを使用して同じことを達成するにはどうすればよいですか?

ありがとうございます!

答えて

2

既にコンパイルされたものは解釈できません。それを解釈したい場合は、ソースが必要です。あなたが好きなら、あなたはパッケージを作ることができます。手順はhereです。

+0

解釈がソースから発生する場合は、そうです。しかし、ほとんどの現代の "インタープリター"は、バイトコードのような中間表現から解釈します。私はGHCiもそれを読んでいると思うし、そうしてはならない理由は見当たりません。そうでないと言う情報源がありますか? – delnan

+0

GHCは、解釈するバイトコードを保存しません。 – augustss

+0

GHC APIを使用して、エクスポートされたトップレベル定義の背後にある.oと.hiファイル(.hsファイルが削除されている)を使用して値を取得できます。だから、この価値を得ることは完全に可能なように私には思われます。私はghciやヒントを使って同じことをする方法を理解する必要があります。 –

関連する問題