GHCi中的“Prelude”前缀是什么意思?

5
我刚开始学习 Haskell。预加载模块被描述为默认模块:The Prelude: a standard module. The Prelude is imported by default into all Haskell modules。但这并没有解释为什么各种文档中在 REPL 中都有“Prelude”前缀。
Prelude>

我已经通过 Chocolatey 安装了 mingw 版本。我的 REPL 显示 "ghci" 作为前缀,而不是 "Prelude"。 点击此处
GHCi, version 9.2.1: https://www.haskell.org/ghc/  :? for help
ghci>

预备模块已加载:

GHCi, version 9.2.1: https://www.haskell.org/ghc/  :? for help
ghci> :browse! Prelude
-- imported via Prelude
(!!) :: [a] -> Int -> a
($) :: (a -> b) -> a -> b
...

为什么前缀不同,交互式编译器中的“Prelude”是什么意思?

3
这句话的意思是加载了“Prelude”模块。比如你写了这样一条语句:import Data.List,那么命令行就会显示为 Prelude Data.List>。它列出了当前已经加载了哪些模块。 - Willem Van Onsem
@WillemVanOnsem 但是Prelude模块已经被加载了!更新了Q。 - enkryptor
2
是的,从 GHC-9.0 开始,它不再列出已加载的模块,默认情况下会加载 Prelude。只有当您传递 -XNoImplicitPrelude 标志时,它才不会加载预定义模块。它更改为 ghci> 并不意味着 Prelude 不再加载,它只是意味着它们不再列出已加载的模块,如果您加载了 20 个或更多的模块,则通常不太方便。 - Willem Van Onsem
1个回答

8
“但这并不能解释为什么各种文档中在REPL中使用“Prelude”作为前缀。”
“自以来,它已经改变并显示ghci>提示符。”
“在之前,提示符显示已加载的模块。例如,如果您导入一个模块Data.List,则会将提示符更改为:”
$ ghci-8.6.5
GHCi, version 8.6.5: http://www.haskell.org/ghc/  :? for help
Prelude> import Data.List
Prelude Data.List>

如果我们不通过指定 -XNoImplicitPrelude 标志来加载 Prelude,我们会得到:

$ ghci-8.6.5 -XNoImplicitPrelude
GHCi, version 8.6.5: http://www.haskell.org/ghc/  :? for help
>

截至,它显示ghci>作为提示符。通常,如果您需要使用许多模块,则提示符会变得非常长,因此使用GHCi变得不方便。
您可以使用:set prompt "someprompt> "将提示符设置为其他内容,例如:
$ ghci                                                                                                                                                                                      
GHCi, version 9.0.1: https://www.haskell.org/ghc/  :? for help
ghci> :set prompt "someprompt> "
someprompt> 

提示符中有一些特殊序列用于显示信息,如@pedrofurla所说。如果您想在新版本的GHCi中恢复旧的行为,则将提示符设置为%s>(对于多行提示符也要执行:set prompt-cont "%s| "):
$ ghci
GHCi, version 9.0.1: https://www.haskell.org/ghc/  :? for help
ghci> :set prompt "%s> "
Prelude> import Data.List
Prelude Data.List> 

如果您希望更改提示符的更改在新的GHCi会话中保持不变,则将命令放入~/.ghci中(如果不存在,则创建它)。

3
一个不错的参考资料:https://downloads.haskell.org/ghc/latest/docs/html/users_guide/ghci.html#ghci-cmd-:set%20prompt。 - pedrofurla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接