Haskell库导入语法
很抱歉问了一个非常基本的问题:在GHCi中,Haskell库导入语法,haskell,Haskell,很抱歉问了一个非常基本的问题:在GHCi中,import Library.Name和:m+Library.Name之间有区别吗?它们看起来是等价的,但我认为使用替代语法是有原因的。您可以在源代码中包含import,这更一般,而:m是一个特定于ghci的命令(为了方便) 您可以使用ghci>:m+模块1。。。ModuleN加载多个模块。使用-而不是+卸载模块。因为ghci是交互式的,所以我会坚持使用:m,除非您的工作流程是:编辑.hs文件,保存它,然后重新加载它。然后,导入将更合适(并具有更多功能
import Library.Name
和:m+Library.Name
之间有区别吗?它们看起来是等价的,但我认为使用替代语法是有原因的。您可以在源代码中包含import
,这更一般,而:m
是一个特定于ghci的命令(为了方便)
您可以使用ghci>:m+模块1。。。ModuleN
加载多个模块。使用-
而不是+
卸载模块。因为ghci
是交互式的,所以我会坚持使用:m
,除非您的工作流程是:编辑.hs
文件,保存它,然后重新加载它。然后,导入
将更合适(并具有更多功能,例如)
如果以后决定使用例如
ghc
来编译程序,那么import
指令也会起作用。您可以有选择地只导入特定函数:导入数据。列表(排序)
只导入排序,因此对名称空间的污染更少。您是对的,导入模块
和:模块+模块
是相同的,但是:模块
(以下简称:m
)语法
IO
do
块的内部;现在它支持语言的每一部分,所以我们可以做import
s。(看起来是这样,但是;我们直到2008年才获得对顶级声明的完全支持。)import M1
、import M2
和import M3
相同:m-m
将在提示下从当前范围中删除m
的内容*文件
中,可以查看导入的所有内容,甚至可以查看未导出的所有内容。如果加载了解释模块MI
,则可以使用:m+M1*MI M3
以普通方式将M1
和M2
引入范围,以特殊方式将MI
引入范围import
语法确实为我们提供了:m
没有的三件事:
导入符合条件的数据。映射为M
并使用M.lookup
比必须执行数据.Map.lookup
或遭受歧义错误要好得多。(请注意,安装的每个软件包在GHCi中都是完全合格的,因此,import qualified Module
本身并不能为您带来任何好处。)Data.Map
中使用M
限定的函数,我仍然可以执行import Data.Map(Map)
将类型引入限定范围隐藏。与上述相反;也许我正在编写自己的排序例程,这样我就可以导入数据。列表隐藏(排序)
您也可以签出。那么:m只是为了简洁吗?我突然想到:m还允许在库被导入后删除库。谢谢您的详细回答;如果我没有将线程标记为“已解决”,我会选择它。