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>
Run Code Online (Sandbox Code Playgroud)
hello.hs中的同一行[h < - IO.openFile"testtext"IO.ReadMode]抛出错误.我该如何解决?我究竟做错了什么?
[编辑]来源和输出:http://pastebin.com/KvEvggQK
你只能<-在do-block¹中使用(你在GHCI中隐含,但在Haskell文件中没有).
在Haskell文件中,您只能使用编写绑定=.
您可以做的是将以下内容放在Haskell文件中:
myHandle = do h <- IO.openFile "testtext" IO.ReadMode
return h
Run Code Online (Sandbox Code Playgroud)
虽然如果你考虑一下这一点,这就是:
myHandle = IO.openFile "testtext" IO.ReadMode
Run Code Online (Sandbox Code Playgroud)
然而,这种方式myHandle仍然包含在内IO,你需要<-(或>>=)在ghci中解开它.
您不能以只加载文件的方式编写Haskell文件,将打开testtext并为您提供文件句柄.
¹或列表理解,但有正确的操作数<-需要成为一个列表,所以这与你的情况无关.