Sto eseguendo GHC versione 7.8.3 su Windows 7.Come utilizzare correttamente le espressioni monadiche in Haskell senza ottenere errori di analisi?
Ok, non si tratta di frammenti di codice di fantasia. Sto solo cercando di non essere un noob qui e in realtà compilo qualcosa in un modo che assomiglia vagamente alla struttura dei linguaggi di effetti collaterali.
Ho il codice seguente:
main =
do {
let x = [0..10];
print x
}
I've learned here, che la parola chiave fare è uno zucchero sintattico di fantasia per le espressioni monadici fantasia. Quando provo a compilare, ottengo il seguente errore:
main.hs:4:1: parse error on input 'print'
E ho imparato a this other question, che le schede a Haskell sono il male, così ho cercato di omettere loro:
main =
do {
let x = [0..10];
print x
}
E ho fallito miseramente, perché l'errore di analisi persiste.
I've also learned here, che la stampa è uno zucchero sintattico per l'equivalente di fantasia:
main =
do {
let x = [0..10];
putStrLn $ show x
}
Ma allora ottengo questo errore invece:
main.hs:4:9: parse error on input 'putStrLn'
Cercando di affrontare la mia disperazione, ho cercato di omettere la parola chiave let, after reading this answer:
main =
do {
x = [0..10];
print x
}
E allora ottengo:
main.hs:4:1: parse error on input '='
E in un inutile tentativo finale, ho anche cercato di omettere il ';' in questo modo:
main =
do {
let x = [0..10]
print x
}
E preso:
main.hs:4:1: parse error on input 'print'
Quindi,
Come usare correttamente le espressioni monadici a Haskell senza ottenere errori di analisi? C'è qualche speranza?
Se si utilizza parentesi esplicite sembra il parser richiede l' 'tale dicitura nella dichiarazione let. Quindi 'do {let x = 10; print x} 'non funziona ma' do {let x = 10 in print x} 'fa. In alternativa, ometti le parentesi e puoi omettere il 'in'. – user2407038