如何修复haskell中的“输入解析错误”?

时间:2010-12-19 09:59:59

标签: 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> 

hello.hs中的同一行[h&lt; - IO.openFile“testtext”IO.ReadMode]抛出错误。我该如何解决?我做错了什么?

[编辑] 来源和输出:http://pastebin.com/KvEvggQK

2 个答案:

答案 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]