如标题所述。有一个代码库,在那里我看到了以下语法
import "cryptonite" Crypto.Hash
(Context, Digest, SHA256, hash, hashFinalize, hashInit,
hashUpdate)
Run Code Online (Sandbox Code Playgroud)
在haskell wiki 上的 import上似乎没有提到这种语法。
什么是"cryptonite"
串在这里做?
这个语法从何而来?
是 Haskell2010 的一部分,如果是这样,在语言报告中的哪里提到了?
这是使用PackageImports
扩展时支持的额外语法:
通过 PackageImports 扩展,GHC 允许导入声明由模块要从中导入的包名称限定。例如:
Run Code Online (Sandbox Code Playgroud)import "network" Network.Socket
将从
Network.Socket
包network
(任何版本)中导入模块。当同一个模块可从多个包中使用,或者同时存在于正在构建的当前包和外部包中时,这可用于消除导入的歧义。可用于引用当前正在构建的包的特殊包名称。
偶尔会发生两个包导出同名模块的情况。例如两者hashmap
和unordered-containers
export Data.HashSet
。如果两个包都安装了,我们希望消除不同包之间的歧义。通过这种类型的导入,作者因此指定Crypto.Hash
了cryptonite
需要使用的模块。
这是给我所知不是标准的Haskell的(在这个意义上,其他的Haskell编译器不具备支持这一点,似乎不是在指定的哈斯克尔2010年报告的import语句部分),但格拉斯哥Haskell编译扩展。当然其他编译器也可以支持这一点,但是没有这个扩展的编译器仍然可以正确地称自己为“Haskell 编译器”。为了激活此扩展,您需要使用-XPackageImports
扩展进行编译:
ghc -XPackageImports main.hs
Run Code Online (Sandbox Code Playgroud)
这是一个动态标志,因此也可以在 Haskell 源文件的“pragma”中指定。
归档时间: |
|
查看次数: |
129 次 |
最近记录: |