5 Stimmen

Wie behebt man "Parse-Fehler bei der Eingabe" in Haskell?

Prelude Data.Set> :load hello
[1 of 1] Compiling Main             ( hello.hs, interpreted )

hello.hs:11:11: parse error on input `<-'
Failed, modules loaded: none.
Prelude Data.Set> h <- IO.openFile "testtext" IO.ReadMode
Prelude Data.Set> 

Dieselbe Zeile [h <- IO.openFile "testtext" IO.ReadMode] in hello.hs löst den Fehler aus. Wie kann ich das beheben? Was mache ich falsch?

[EDIT] Quelle und Ausgang: http://pastebin.com/KvEvggQK

8voto

sepp2k Punkte 352762

Sie können nur verwenden <- innerhalb einer do -block¹ (den man in GHCI implizit hat, aber nicht in Haskell-Dateien).

In einer Haskell-Datei dürfen Sie nur Bindungen schreiben, die = .

Sie könnten folgendes in die Haskell-Datei einfügen:

myHandle = do h <- IO.openFile "testtext" IO.ReadMode
              return h

Aber wenn man ein bisschen darüber nachdenkt, ist das genau das Gleiche wie:

myHandle = IO.openFile "testtext" IO.ReadMode

Doch dieser Weg myHandle ist immer noch eingewickelt in IO und Sie benötigen <- (oder >>= ) in ghci, um es auszupacken.

Man kann eine Haskell-Datei nicht so schreiben, dass das bloße Laden der Datei die testtext und geben Ihnen das Dateihandle.


¹ Oder ein Listenverständnis, aber dort ist der rechte Operand von <- muss eine Liste sein, das hat also nichts mit Ihrer Situation zu tun.

-2voto

Oswald Punkte 30371

Versuchen Sie

[h | h <- IO.openFile "testtext" IO.ReadMode]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X