2
単純なモジュールTestModule.hs
を作成します。これにはエクスポートされたトップレベル定義testval = 2
が1つ含まれています。コンパイルして、TestModule.o
とTestModule.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>
:私は、このように、ghci
でTestModule.o
をロードします。どうして?ソースファイルにアクセスせずにこれをどのように達成できますか?
その他の質問:hint
パッケージを使用して同じことを達成するにはどうすればよいですか?
ありがとうございます!
解釈がソースから発生する場合は、そうです。しかし、ほとんどの現代の "インタープリター"は、バイトコードのような中間表現から解釈します。私はGHCiもそれを読んでいると思うし、そうしてはならない理由は見当たりません。そうでないと言う情報源がありますか? – delnan
GHCは、解釈するバイトコードを保存しません。 – augustss
GHC APIを使用して、エクスポートされたトップレベル定義の背後にある.oと.hiファイル(.hsファイルが削除されている)を使用して値を取得できます。だから、この価値を得ることは完全に可能なように私には思われます。私はghciやヒントを使って同じことをする方法を理解する必要があります。 –