2016-12-02 4 views
1

내가 ghci에있어 다음과 같은 작품 것을 발견`에서 let` :하스켈 멀티 라인`ghci`

let foo = ["a", "b", "c"] 

...하지만이 작동하지 않습니다

let bar = ["a", 
      "b", 
      "c"] 

...도 않습니다이 :

let baz = ["a"] ++ 
      ["b"] ++ 
      ["c"] 

같은 오류가 나는 파일로 컴파일 할 때 제공되는, 그래서에있는에서 오는 것이 아니다된다대 ghc을 사용합니다.

오류 : GHCi에서

[1 of 1] Compiling Main    (test.hs, test.o) 

test.hs:3:1: error: 
    parse error (possibly incorrect indentation or mismatched brackets) 

답변

4

당신이 여러 표현식 :{ :}을 사용할 수 있습니다. 예를 들어 :

Prelude> :{ 
Prelude| let bar = ["a", 
Prelude|   "b", 
Prelude|   "c"] 
Prelude| :} 

:{ :} 다음 줄 바꿈 한 후 코드를 평가하고 완전한 표현하지 않기 때문에 당신 오류를 던지고에서 GHCi를 유지합니다.

let은 최상위 수준 정의에 필요하지 않습니다. 일반 하스켈 소스 파일에서 당신은 작성합니다 새로운 GHCi 버전 또한

bar = ["a", 
     "b", 
     "c"] 

(8.0 이상)을 당신은 어느 let 필요하지 않습니다.

+0

'ghc' ('ghci'가 아니라)로 코드를 컴파일하면 어떨까요 – Scoobie

+0

소스 파일에서': {:}'이 필요하지 않습니다. 당신은 정상적인 하스켈을 작성합니다. ': {:}'는 GHCi가 첫 번째 개행 후에 코드를 평가하고 오류를 던지지 않게하는 것입니다. – jpath

+0

그 다중 행 코드는'ghc'에서도 컴파일되지 않습니다. 하자 foo는 = "A", "B", "C"] 하자 바 = "A", "B" "C"] 내버려 바즈 = "A"] ++ [ "B"] ++ [ "C"] 주 = 인쇄 foo는 당신은'let'을 쓸 것입니다 소스 파일의 최상위 정의에 대한 – Scoobie