2011-09-27 7 views
7

나는 숙제를하기 위해 Notepad ++와 WinGHCi를 사용하고 있으며 약간의 "데이터베이스"를 정의해야합니다. 형식은 임의적이며 내가 잘못 될 것이라고 생각하지 않습니다. 어쨌든, 여기에 내가 * .hs 파일에 사용하고있는 작업은 다음과 같습니다 a1.hs : 118 : 1 : 구문 분석 오류 (아마도 잘못된 들여 쓰기).hs 파일에서 let 사용하기

내가 장난 시도

let studentDB = [ 
       ("sally", ["cpsc110", "cpsc312", "cpsc204"]), 
       ("jim",  ["cpsc110", "cpsc313"]), 
       ("bob",  ["cpsc121", "cpsc303", "cpsc212"]), 
       ("frank", ["cpsc110", "cpsc212", "cpsc204"]), 
       ("billy", ["cpsc312", "cpsc236"]), 
       ("jane", ["cpsc121"]), 
       ("larry", ["cpsc411", "cpsc236"]) ] 

WinGHCi 날이 오류를 제공합니다 또는 위에 다른 튜플을 탭 및 다른 줄에 내 목록 괄호를 배치하지만 아무것도 작동하지 못했습니다. 더 작은 것이 내가 버그를 추적하는 데 도움이 될 것이라고 생각했기 때문에 다음과 같이했습니다.

let s = [] 

그러나 그게 나에게도 같은 오류가있었습니다. 이것은 약간의 기발한 Notepad ++ 동작으로 인해 들여 쓰기 오류입니까? 아니면 내 하스켈이 틀렸어? 감사.

답변

14

* .hs 파일의 내용이 ghci에 입력 할 수있는 것과 같다고 생각합니다. 그건 잘못된거야. ghci에 입력 할 때 실제로는 do 블록에 입력합니다. 따라서 다음 구문이 정확합니다.

main = do 
    let s = [] 
    -- do more stuff 

그러나 * .hs 파일의 최상위 수준에서는 상황이 다릅니다. 송출 구조가 바로 내가 찾던 정확히 무엇을

s = [] 
+1

말, 실제로

당신이 바인딩 최상위를 정의하려면

let s = [] in codeThatReferencesS 
, 감사합니다! – user966249

관련 문제