2011-09-17 5 views
2

단순한 모듈 TestModule.hs을 생성합니다.이 모듈에는 내 보낸 최상위 정의 testval = 2이 하나 있습니다. 컴파일하면 TestModule.oTestModule.hi이 생성됩니다. I TestModule.hs을 삭제하십시오.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> 

당신이 볼 수 있듯이, TestModule이 범위에 포함되지 내가 testval에 액세스 할 수 없습니다 : 나는 다음과 같이 ghciTestModule.o을로드합니다. 왜? 소스 파일에 액세스하지 않고 어떻게이 작업을 수행 할 수 있습니까?

추가 질문 : hint 패키지를 사용하여 동일한 작업을 수행하려면 어떻게해야합니까?

감사합니다.

답변

2

이미 컴파일 된 것을 해석 할 수 없습니다. 그것을 해석하고 싶다면 소스가 필요합니다. 원하는 경우 패키지를 만들 수 있습니다. 지침은 here입니다.

+0

해석이 소스에서 발생하는 경우에 해당됩니다. 그러나 대부분의 현대 "해석기"는 바이트 코드와 같은 중간 표현에서 해석합니다. 저는 GHCi도 그렇게 생각합니다. 나는 그렇게해서는 안되는 이유를 보지 못합니다. 그렇지 않으면 출처가 있습니까? – delnan

+0

GHC는 해석하는 바이트 코드를 절대로 저장하지 않습니다. – augustss

+0

GHC API를 사용하면 .o 및 .hi 파일 (.hs 파일이 삭제됨) 만 사용하여 내 보낸 최상위 수준 정의의 가치를 얻을 수 있습니다. 그래서,이 가치를 얻는 것은 완전히 가능합니다. ghci 또는 힌트를 사용하여 동일한 작업을 수행하는 방법을 알아야합니다. –

관련 문제