haskell - 如何在haskell中修复 "parse error on input"?

标签 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 <- IO.openFile "testtext"IO.ReadMode] 会引发错误。我该如何解决?我究竟做错了什么?

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

最佳答案

您只能使用 <-do 内-block¹(您隐含在 GHCI 中,但不在 Haskell 文件中)。

在 Haskell 文件中,您只能使用 = 编写绑定(bind)。 .

您可以做的是将以下内容放入 Haskell 文件中:

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

尽管如果您考虑一下,这与以下内容相同:
myHandle = IO.openFile "testtext" IO.ReadMode

但是这样 myHandle仍然包裹在 IO 中你需要<- (或 >>= )在 ghci 中打开它。

您不能以这样的方式编写 Haskell 文件,即仅加载文件就会打开 testtext并给你文件句柄。

¹ 或列表理解,但有 <- 的正确操作数需要是一个列表,所以这与你的情况无关。

关于haskell - 如何在haskell中修复 "parse error on input"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4482409/

相关文章:

haskell - 在 do block 内迭代

debugging - Haskell:寻找不完整记录构建的来源

haskell - 如何在 foldl 函数 Haskell 中记录操作?

haskell - LiftIO 的目的是什么?

haskell - 安全实例覆盖

haskell - Haskell 和类 Haskell 语言之间的类型声明语法差异

python - Haskell 在朴素整数分解中比 Python 慢?

haskell - 如何为 Church 编码的免费 monad 编写解包器?(Haskell)

haskell - 什么是在 Haskell 中生成所有整数的无限列表的好方法

haskell - 为什么 Haskell/GHC 不支持记录名重载