2011-09-27 13 views
7

Sto utilizzando Notepad ++ e WinGHCi per fare alcuni compiti e devo definire un piccolo "database". Il formato è arbitrario e non penso che sia dove sto andando male. In ogni caso, ecco quello che sto utilizzando in un file * .hs:Utilizzo del file .hs in attesa.

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 mi dà questo errore: a1.hs: 118: 1: Errore di analisi (possibilmente di rientro non corretta)

ho provato scompigliare tabulazione delle tuple sopra o e posizionando le parentesi elenco su linee diverse ma non riuscivo a far funzionare nulla. Ho pensato che qualcosa di più piccolo mi avrebbe aiutato a tenere traccia del bug, così l'ho fatto invece:

let s = [] 

Ma questo mi ha dato lo stesso errore. Si tratta di un errore di indentazione, forse a causa di qualche strano comportamento Notepad ++? O il mio Haskell è sbagliato? Grazie.

risposta

14

Immagino che tu stia pensando che il contenuto di un file * .hs sia come quello che puoi digitare in ghci. Questo è sbagliato. Quando si digita in ghci, si sta effettivamente digitando un blocco do. Così la seguente sintassi è corretta:

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

Tuttavia, al livello superiore di un file * .hs, le cose sono diverse. Il costrutto let è in realtà

let s = [] in 
    codeThatReferencesS 

Se si desidera definire un legame di alto livello, basta dire

s = [] 
+1

Esattamente quello che stavo cercando, grazie! – user966249

Problemi correlati