2
단순한 모듈 TestModule.hs
을 생성합니다.이 모듈에는 내 보낸 최상위 정의 testval = 2
이 하나 있습니다. 컴파일하면 TestModule.o
과 TestModule.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
에 액세스 할 수 없습니다 : 나는 다음과 같이 ghci
에 TestModule.o
을로드합니다. 왜? 소스 파일에 액세스하지 않고 어떻게이 작업을 수행 할 수 있습니까?
추가 질문 : hint
패키지를 사용하여 동일한 작업을 수행하려면 어떻게해야합니까?
감사합니다.
해석이 소스에서 발생하는 경우에 해당됩니다. 그러나 대부분의 현대 "해석기"는 바이트 코드와 같은 중간 표현에서 해석합니다. 저는 GHCi도 그렇게 생각합니다. 나는 그렇게해서는 안되는 이유를 보지 못합니다. 그렇지 않으면 출처가 있습니까? – delnan
GHC는 해석하는 바이트 코드를 절대로 저장하지 않습니다. – augustss
GHC API를 사용하면 .o 및 .hi 파일 (.hs 파일이 삭제됨) 만 사용하여 내 보낸 최상위 수준 정의의 가치를 얻을 수 있습니다. 그래서,이 가치를 얻는 것은 완전히 가능합니다. ghci 또는 힌트를 사용하여 동일한 작업을 수행하는 방법을 알아야합니다. –