Używam GHC w wersji 7.8.3 na Windows 7.Jak poprawnie używać wyrażeń monadycznych w Haskell bez generowania błędów analizy?
Ok, nie chodzi o wyszukane fragmenty kodu. Po prostu staram się nie być noobem i faktycznie skompilować coś w sposób, który niejasno przypomina strukturę języków efektów ubocznych.
Mam następujący kod:
main =
do {
let x = [0..10];
print x
}
I've learned here, że słowo kluczowe zrobić to fantazyjny cukier syntaktyczny dla fantazyjnych wyrażeń monadycznych. Gdy próbuję go skompilować, pojawia się następujący błąd:
main.hs:4:1: parse error on input 'print'
A ja nauczyłem się w this other question, że zakładki w Haskell są złe, więc starałem się je pominąć:
main =
do {
let x = [0..10];
print x
}
I nie udało mi się niestety, ponieważ błąd parsowania nadal występuje.
I've also learned here, że druk jest cukier syntaktyczny dla fancy odpowiednik:
main =
do {
let x = [0..10];
putStrLn $ show x
}
Ale wtedy ten błąd zamiast:
main.hs:4:9: parse error on input 'putStrLn'
Próbując zmierzyć moją rozpacz, Próbowałam pominąć słowo kluczowe "let", after reading this answer:
main =
do {
x = [0..10];
print x
}
A potem otrzymam:
main.hs:4:1: parse error on input '='
I w ostatecznej, bezużytecznej próbie, próbowałem nawet pominąć ";" tak:
main =
do {
let x = [0..10]
print x
}
I got:
main.hs:4:1: parse error on input 'print'
Więc
Jak prawidłowo używać monadycznego wyrażenia w Haskell bez uzyskania błędy analizowania? Czy jest jakaś nadzieja?
Jeśli używasz wyraźne szelki wydaje parser wymaga 'in' w rachunku pozwolisz. Więc 'do {let x = 10; print x} 'nie działa, ale' do {let x = 10 in print x} 'robi. Ewentualnie pomiń nawiasy klamrowe i możesz pominąć wyraz "w". – user2407038