2010-06-01 2 views
6

에서 기능을로드하지, 내가 가진 : ghci에서ghci이 test.hs에서 파일

doubleMe x = x + x 

, 내가 입력 :

Prelude> :l test 
[1 of 1] Compiling Main    (test.hs, interpreted) 
Ok, modules loaded: Main. 
*Main> doubleMe 9 

<interactive>:1:0: Not in scope: `doubleMe' 
*Main> 

이유는 무엇입니까? 어떻게 고치는 지?

답변

4

올바른 test.hs를로드하고 있습니까? 어쩌면 잘못된 디렉토리에있을 수도 있습니다. 또는 doubleMe의 정의를 추가 한 후에 test.hs를 저장하지 않았을 수도 있습니다.

+2

폴더에 바로 가기 대신 바탕 화면에 폴더를 만들었습니다. –

5
  1. 제거 test.hi과 test.o 디렉토리에서 다음 ghci test을 시도합니다. [때로는 ghc file.hs을 실행하면 ghc --make file.hs이 아니라 정의되지 않은 참조 오류가 발생하지만 나중에 ghci에 의해 읽혀지는 파일을 만듭니다. 어쩌면 이것은 버그입니다.]

  2. 이 ghci에

    :cd "<path to your file>" 
    :l test 
    :browse 
    

    을보십시오. 그 결과는 무엇입니까?

+0

OS X 10.11.6 및 GHCI 8.2.2에서는''에 큰 따옴표를 사용할 필요가 없습니다. ''cd ''을 시도해 볼 수 있습니다. – Elmex80s

29

내 생각 엔 당신이 당신의 소스 파일의 주요 기능을 정의한 것입니다. 당신이 어떤 기능을하지만 main를 가져올 것이다 :l test으로 모듈을로드하는 main 기능을 정의한 경우

. 이 경우 모듈 이름에 별표를 붙이면로드 할 수 있습니다 : :l *test. 그 이유는 컴파일 된 바이너리가 내보내기되지 않은 최상위 함수를 숨길 수 있기 때문입니다. 아스 테릭스 (asterix)를 앞에 붙이면 GHCi는 사전 컴파일 된 모듈 (test)을 무시하고 소스 파일을 대신 해석합니다 (test.hs).

[jkramer/sgi5k:.../haskell]# cat test.hs 

main = do 
    print $ doubleMe 2 

doubleMe x = x + x 

[jkramer/sgi5k:.../haskell]# ghc --make test 
[jkramer/sgi5k:.../haskell]# ghci 
[...some messages...] 
>> :l test 
Ok, modules loaded: Main. 
>> :t doubleMe 

<interactive>:1:0: Not in scope: `doubleMe' 
>> :l *test 
[1 of 1] Compiling Main    (test.hs, interpreted) 
Ok, modules loaded: Main. 
>> :t doubleMe 
doubleMe :: (Num a) => a -> a 

확인 자세한 내용은 다음 링크 :

http://www.haskell.org/ghc/docs/6.12.2/html/users_guide/ghci-compiled.html http://www.haskell.org/ghc/docs/6.12.2/html/users_guide/interactive-evaluation.html#ghci-scope

+3

이것은 op의 문제는 아니지만 문제를 해결했습니다. * module_name 트릭을 주셔서 감사합니다. – Saterus

+0

이것은 나를 위해 작동하지 않습니다. 우선, 테스트를로드 한 후에 >> 대신 Main *처럼 보일 것입니다. 또한 나는 이라는 에러 메시지를 받는다 : '* fadetoblack '모듈을 찾을 수 없다 : -v를 사용하여 검색된 파일 목록을 볼 수있다. –

0

이 너무 나에게 무슨 일이 있었 - 그리고 경우에 다른 사람이이 페이지에 걸쳐 그것으로 실행하고 비틀 거림, 내 문제는 것이 었습니다 GHCI를 실행중인 VM이 디스크 공간이 부족하여 매번 빈 파일을로드하려고 시도했습니다.