对于这个非常基本的问题抱歉:在 GHCi 中,两者之间有区别吗?import Library.Name
and :m +Library.Name
?它们看起来是等效的,但我认为使用替代语法是有原因的。
你说得对import Module
and :module + Module
是相同的,但有几个原因:module
(以下简称:m
) 句法。
年纪大了。 GHCi 过去实际上只是一个IO
do
堵塞;现在它支持该语言的每个部分,所以我们可以做import
s。 (看起来像GHCi 6.6.x 不支持import, but GHCi 6.8.1 做到了;直到我们才得到对顶级声明的全力支持GHCi 7.4.1.)
它允许您一次导入多个模块。:m + M1 M2 M3
和写作一样import M1
, import M2
, and import M3
每个都在一个新行上。
它允许您取消导入模块::m - M
将删除M
提示符下当前范围内的内容。
它允许您导入解释模块,以便您可以看到whole范围。这就是当你:load File.hs
;你发现你在模块中*File
, 并且可以e.g.看到一切File
进口,甚至所有不出口的东西。如果你有一个解释模块MI
已加载,然后您可以使用:m + M1 *MI M3
带来M1
and M2
以普通方式进入范围,并且MI
以特殊方式进入范围。
不过,为了完整起见,import
语法确实为我们提供了三件事:m
没有:
合格进口。能够做到更好import qualified Data.Map as M
并使用M.lookup
比必须做的事Data.Map.lookup
或遭受歧义错误。 (请注意,安装的每个软件包都可以在 GHCi 中完全限定,因此import qualified Module
独自一人什么也买不到。)
导入列表。即使我有以下功能Data.Map
合格的M
,我还可以做import Data.Map (Map)
只是将类型带入非限定范围。
Import hiding
。与上述相反;也许我正在编写自己的排序例程,所以我可以这样做import Data.List hiding (sort)
.
您还可以查看GHC (7.6) 用户指南中的 §2.4.5,“提示符下的实际范围是什么?”.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)