多个导入行在 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 - ...
删除一些模块。如果你在谈论你自己的模块(源代码可用),你可以在任何模块名称前加一个星号,以将其内部内容纳入范围。
虽然您不能进行更高级的导入(限定、隐藏或仅导入某些内容)。
这是我在 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 - ...
删除一些模块。如果你在谈论你自己的模块(源代码可用),你可以在任何模块名称前加一个星号,以将其内部内容纳入范围。
虽然您不能进行更高级的导入(限定、隐藏或仅导入某些内容)。