2010-01-06 23 views
15

Tak jak w tytule: Co oznacza The last statement in a 'do' construct must be an expression? Kończyłem mój blok do z putStrLn, jak to pokazuje kilka przykładów, które widziałem, i pojawia się błąd.Haskell - "Ostatnia instrukcja w konstrukcie" do "musi być wyrażeniem"

Kod:

main = do args <- getArgs 
      file <-readFile "TWL06.txt" 
      putStrLn results 
+2

sprawdź wcięcie. upewnij się, że wszystkie linie w bloku mają takie samo wcięcie. tabulatory i spacje nie są takie same – newacct

+2

Jeśli pracujesz z językami wrażliwymi na wcięcia, takimi jak Haskell i Python, upewnij się, że twój edytor ma ustawienia z rozsądnymi zakładkami. ': set et ts = 8 sw = 4 sta' lub więcej w Vim. – ephemient

Odpowiedz

21

Przez większość czasu, to dlatego, że kod jest mis wyrównany i kompilator zakłada, że ​​„nie” blok zakończył przedwcześnie (lub zawiera dodatkowy kod, który naprawdę nie należą tam)

+0

Uratowałem dzień! Dzięki! – hbobenicio

17

Twoja ostatnia linia nie jest czymś someVar <- putStrLn "hello" przypadkiem, prawda? Otrzymasz ten błąd, jeśli spróbujesz wykonać wiązanie zmiennej w ostatnim wierszu, ponieważ jest to odpowiednik putStrLn "Hello" >>= \someVar -> - oczekuje, że na końcu pojawi się wyrażenie.

+0

Nie, po prostu 'putStrLn' ... – RCIX

+0

zajęło mi trochę czasu, aby to rozwiązać .... Pozdrawiam Cię ... Proszę pana! – 7kemZmani

7

Nieprawidłowe wcięcie może doprowadzić do tego błędu . Poza tym dobrze jest nie używać kart, tylko spacje.

Powiązane problemy