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>
hello.hs中的同一行[h&lt; - IO.openFile“testtext”IO.ReadMode]抛出错误。我该如何解决?我做错了什么?
[编辑] 来源和输出:http://pastebin.com/KvEvggQK
答案 0 :(得分:8)
你只能在<-
- block¹中使用do
(你在GHCI中隐含,但不在Haskell文件中)。
在Haskell文件中,您只能使用=
编写绑定。
您可以做的是将以下内容放在Haskell文件中:
myHandle = do h <- IO.openFile "testtext" IO.ReadMode
return h
虽然如果你考虑一下,这与:
相同myHandle = IO.openFile "testtext" IO.ReadMode
但是这种方式[{1}}仍然包含在myHandle
中,您需要在ghci中IO
(或<-
)来解包它。
您不能以只加载文件的方式编写Haskell文件,将打开>>=
并为您提供文件句柄。
¹或列表理解,但testtext
的右操作数必须是一个列表,这与你的情况无关。
答案 1 :(得分:-2)
尝试
[h | h <- IO.openFile "testtext" IO.ReadMode]