How to fix "parse error on input" in haskell?
You can only use <-
inside a do
-block¹ (which you're implicitly in in GHCI, but not in Haskell files).
In a Haskell file, you're only allowed to write bindings using =
.
What you could do is put the following in the Haskell file:
myHandle = do h <- IO.openFile "testtext" IO.ReadMode
return h
Though if you think about that for a bit, this is just the same as:
myHandle = IO.openFile "testtext" IO.ReadMode
However this way myHandle
is still wrapped in IO
and you'll need <-
(or >>=
) in ghci to unwrap it.
You can't write a Haskell file in such a way that just loading the file, will open testtext
and give you the file handle.
¹ Or a list comprehension, but there the right operand of <-
needs to be a list, so that has nothing to do with your situation.
Related videos on Youtube
Karthick
wannabe code monkey. upcoming Keyboard-Ninja. Linux user.
Updated on June 04, 2022Comments
-
Karthick almost 2 years
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>
The same line [h <- IO.openFile "testtext" IO.ReadMode] inside hello.hs throws the error. How do i fix this? What am I doing wrong?
[EDIT] Source and output: http://pastebin.com/KvEvggQK
-
sepp2k over 13 yearsThis is completely wrong. You can't use
IO
s as the right operand to<-
in a list comprehension. -
Oswald over 13 yearsMy answer is at most partially wrong: [h <- IO.openFile "Copy Bin.txt" IO.ReadMode] produces a parse error, [h | h <- IO.openFile "Copy Bin.txt" IO.ReadMode] does not produce a parse error. Depending on the definition of IO.openFile it might not produce any error at all. Granted, it produces type error when the most common definition is used.