多个导入行在 ghci 中产生错误

Multiple import lines produces error in ghci

这是我在 ghci REPL (stack ghci 8.10.7) 中尝试过的

λ> :{
| import Data.List
| import Data.Ratio
| :}
error: expecting a single import declaration

为什么我一次不能导入多个?顺便说一句,可以这样输入完整的模块定义吗,即

λ> :{
 | module STAL where
 | import Data.List
 | import Data.Ratio
 | import Data.Decimal
 | :}

我的动机是我将 Emacs org-mode 的 babel 用于 Haskell,它只适用于包含在 :{ :}.

中的多行代码

目前不支持这种多重导入。但是,有一张已关闭的工单要求相同的 https://gitlab.haskell.org/ghc/ghc/-/issues/20473, and a merged patch that implements what you're asking for: https://gitlab.haskell.org/ghc/ghc/-/commit/7850142c09090a2eef1e1b0281acd641e843356a

我使用 GHC 9.2.1 进行了测试,它的响应方式与您报告的方式相同,因此显然该补丁并未发布到该版本。但我想下一个版本将支持像这样的多个导入。

我刚刚检查了一下,事实证明(至少在 GHC 9.0.1 上)您可以在多行模式下使用 ghci 的 :module 命令(简称 :m)。

Prelude
λ :{
| :m Data.List Data.Ratio
| :}
Prelude Data.List Data.Ratio

这也允许 :m + ... 添加一些模块,或 :m - ... 删除一些模块。如果你在谈论你自己的模块(源代码可用),你可以在任何模块名称前加一个星号,以将其内部内容纳入范围。

虽然您不能进行更高级的导入(限定、隐藏或仅导入某些内容)。