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
.