2014-01-08 3 views
11

GHCi가 모듈을 세션에로드하는 데 너무 많은 명령을 사용하는 이유는 무엇입니까? 현재 대상에 모듈을 추가 설정 GHCi의 모듈로드 옵션

  • :module [+/-] [*]<mod> - - 세트

    • add [*]<mod> :

      여기 ghci에서 :help에서 그들의 오히려 혼란 설명과 함께, 제가 알고 것들 표현식 평가를위한 컨텍스트

    • :load [*]<mod> -로드 모듈과 그 부속 장치
    • :reload <mod> - 현재 모듈 세트를 다시로드하십시오.
    • import Mod

    그들은 서로 어떻게해야합니까 : (:help이이 모듈 인수를 취할 수있는 말을하지 않지만, 그것을 할 수있는 것 같다 있습니다.)? 별표로 어떻게 변경됩니까? 왜 그렇게 많은가? . 대상이평가 컨텍스트를 설정 당신은 :add, :load:reload 설정 한 목표로 작업

    , 당신은 평가 컨텍스트와 함께 작동 : :(

  • +4

    [문서] (http://www.haskell.org/ghc/docs/7.4.1/html/users_guide/ghci-commands.html)을 읽으셨습니까? – bheklilr

    +0

    문서는 확실히': reload'에 대한 논점에 대해 언급하지 않았습니다 –

    +0

    @bheklilr 저는 그렇게하지 않았습니다 - 도움이됩니다, 감사합니다 – hdgarrood

    답변

    10

    여기에 두 개의 서로 다른 개념 직장에서 본질적으로있다 :moduleimport.

    대상 세트는 ghci가 읽고 컴파일하는 로컬로 사용할 수있는 모듈 목록입니다. 일반적으로이 모듈을 사용하여 작업중인 소스를 지정합니다. ghci will lo 광고하고 각 모듈과 필요한 모든 종속성을 컴파일하십시오.

    대상 세트를 정확하게 주어진 모듈 세트로 재설정하려면 :load을 사용하고 주어진 대상 세트에 지정된 모듈을 추가하려면 :add을 사용합니다.

    목표 세트의 모듈을 *으로 지정하면 모듈은 항상 "바이트 코드 해석"됩니다. 즉,로드가 빠르지 만 컴파일 된 코드만큼 빠르게 실행되지 않습니다. 그렇지 않으면 ghci는 컴파일 된 객체 파일을 사용합니다. if 사용 가능하고 바이트 코드로 해석하십시오.

    은 자체적으로 전체 대상 세트 및 종속성을 다시로드합니다. 나는 정확히 무엇을 정확히 모르겠다. :reload <mod> 그러나 나는 그것이 <mod>과 의존성을 다시 적재하고 나머지는 그대로 놔둬 야한다고 생각한다.

    평가 컨텍스트는 프롬프트에서 범위에 포함되는 이름을 제어하며 완전히 문서화 된 here입니다. 평가 컨텍스트에 추가하는 모듈은 대상 세트 + 종속성의 로컬 모듈이거나 종속 코드 인 ghc-pkg (또는 결국은 cabal)을 사용하여 ghc로 이전에 등록 된 패키지 "패키지"일 수 있습니다. import Foo:module +Foo을 쓰는 또 다른 방법 일뿐입니다.

    참고 :이 대답은 ghci 사용에 대한 내 직관적 인 이해와 함께 설명서를 읽고 내 마음에 두 가지를 통합하려는 시도와 혼합되어 있습니다. 그래서 나는이 100 % 정확하지 않을 수 있습니다!