via - osx install haskell




Comandi multilinea in GHCi (2)

La maggior parte delle volte, puoi fare affidamento sull'inferenza di tipo per trovare una firma per te. Nel tuo esempio, è sufficiente quanto segue:

Prelude> let addTwo x y = x + y

Se vuoi veramente una definizione con una firma di tipo, o la tua definizione si estende su più righe, puoi farlo in ghci:

Prelude> :{
Prelude| let addTwo :: Int -> Int -> Int
Prelude|     addTwo x y = x + y 
Prelude| :}
Prelude> addTwo 4 7
11

Nota che puoi anche spremere questo su una riga:

Prelude> let addTwo :: Int -> Int -> Int ; addTwo x y = x + y

Puoi trovare ulteriori informazioni sull'interazione con ghci nella valutazione interattiva nella sezione prompt della documentazione.

Sto avendo problemi nell'inserire comandi multi-linea in ghci. Il seguente codice a 2 righe funziona da un file:

addTwo :: Int -> Int -> Int
addTwo x y = x + y

Ma quando entro ghci, ottengo errori. Ho provato anche a inserire il codice :{ ... :} , ma non funzionano anche per questo esempio, perché questo è solo aggiungendo le linee in una riga, il che non dovrebbe essere il caso.

Sto usando WinGHCi, versione 2011.2.0.1


Risolvi questo problema accendendo GHCI e digitando :set +m :

Prelude> :set +m
Prelude> let addTwo :: Int -> Int -> Int
Prelude|     addTwo x y = x + y
Prelude| 
Prelude> addTwo 1 3
4

Boom.

Che cosa sta succedendo qui (e sto parlando principalmente a te , persona che cerca l'aiuto mentre ti sta facendo strada con Learn You A Haskell ) è che GHCI è un ambiente interattivo in cui stai cambiando le associazioni di nomi di funzioni al volo. Devi racchiudere le definizioni delle funzioni in un blocco let , in modo che Haskell sappia che stai per definire qualcosa. Il :set +m stuff è una scorciatoia per il costrutto multiline :{ code :} .

Lo spazio bianco è anche significativo in blocchi, quindi devi indentare la definizione della tua funzione dopo la definizione del tipo di quattro spazi per tenere conto dei quattro spazi in let .





ghci