2011-01-12 6 views
8

오늘 아침 나쁜 소식은, 계속 배우고있는 Hask를 계속하기 위해 Leksah (멋지게 보이는 응용 프로그램)를 사용해보고 기꺼이했습니다.haskell leksah hello-world

leksah tutorial을 읽고있는 "Hello World"예제를 컴파일 할 수 없습니다.

module Main (
main = putStrLn "Hello World"  
) where 

compilation-error: src\Main.hs:16:5: parse error on input = '를`

module Main (
) where 
main = putStrLn "Hello World" 

compilation-error: src\Main.hs:1:0: The main function 주'Main'

당신이 뭔가 다른 시도 나에게 무엇을 권합니다 모듈 수출되지 않는 이유는 무엇입니까?

중요 편집 : 지금 Leksah 완전히 functionnal 안녕하세요 미니 프로젝트를 포함하는 파일 Main.hs 직접로드 당신이 leksah를 시작 처음으로 함께 제공됩니다. 최소 단위 테스트 카운터 부분도 있습니다. 초보자에게 적합 :-)

답변

15

텍스트를 paranthesis에 모듈 이름은 수출 목록입니다 후. 즉, 거기에 내보내려는 프로그램의 모든 기능을 추가해야합니다. 그러나 이것과 별개로 주요 기능을 어딘가에 정의해야합니다.

module Main (
    main 
) where 
main = putStrLn "Hello World" 

PS를 :이 시도 또한 모듈에서 무엇보다, 거기에 paranthesis 아무것도 제거 할 수는 수출 될 예정이다.

+0

많은 고맙습니다! –

6

두 번째 예가 거의 있습니다. 을 Main 옆에서 제거하면됩니다. 비어있는 모듈에 대한 내보내기 목록입니다 (괄호 사이에는 아무 것도 없습니다). 그 때문에 main이 표시되지 않습니다 (내보내기되지 않았기 때문에).

또한 단지의 주요 수출 수 :

module Main (main) where 
+0

모든 것을 내보내는 것이 좋습니다. –

+0

글쎄, 나는 최선의 방법이 무엇인지 확실히 말할 수는 없지만, 일반적으로 응집력있는 모듈을 만들었다는 합리적으로 좋은 아이디어가있을 때 나는 내 수출을 제한한다. 정의 된 함수 세트를 통해 사람들이 직접 액세스하지 못하도록하려는 데이터 유형의 경우, 내보내기 제한이 중요 할 수 있습니다. – ScottWest

+1

또한 anythig를 내보내지 않으면 컴파일러가 더 효율적으로 최적화 할 수 있습니다. – fuz

6

"모든 것을 내보내는 것이 좋습니다." 기필코 아니다. 헬퍼 메소드와 같은 구현 세부 사항이 외부로 유출되는 것을 원하지는 않습니다. 또 다른 예제는 가치 생성자입니다. 왜냐하면 그것들에 대한 온전한 체크, 기본 인수 등을 가질 방법이 없기 때문입니다. 이를 극복하기 위해 모듈 내부에서만 사용하고 외부에 편리하고 안전한 초기화 함수를 제공합니다.