代码之家  ›  专栏  ›  技术社区  ›  typetetris

导入语法'import“cryptonite”crypto.hash'中带引号的字符串是什么意思?

  •  3
  • typetetris  · 技术社区  · 8 年前

    如标题所述。这里有一个代码库,我在这里看到了以下语法

    import       "cryptonite" Crypto.Hash
                 (Context, Digest, SHA256, hash, hashFinalize, hashInit,
                 hashUpdate)
    

    似乎没有提到这个语法 haskell wiki on imports .

    什么是 "cryptonite" 这里有字符串吗?

    这个语法是从哪里来的?

    是haskell2010的一部分,如果是,在语言报告中提到的地方?

    1 回复  |  直到 8 年前
        1
  •  3
  •   willeM_ Van Onsem    8 年前

    这是在使用 PackageImports 扩展:

    通过packageimports扩展,ghc允许导入声明 通过模块要使用的包名称进行限定 从……进口。例如:

    import "network" Network.Socket
    

    将导入模块 Network.Socket 从包中 network (任何版本)。这可以用来 当同一模块可从多个模块中使用时,消除导入的歧义 包,或同时存在于正在生成的当前包和 外部包装。

    可用于引用当前 正在生成包。

    有时两个包会导出同名的模块。例如,两者 hashmap unordered-containers 出口 Data.HashSet . 如果安装了这两个包,我们希望在不同的包之间消除歧义。对于这种类型的导入,作者因此指定 Crypto.Hash 模块 cryptonite 需要使用。

    据我所知,这不是标准的haskell(也就是说,其他haskell编译器没有 为了支持这一点,似乎 在中指定 import statement section of the Haskell 2010 report 但是格拉斯哥Haskell编译器 延伸 . 当然,其他编译器也可以支持这一点,但是没有这个扩展的编译器仍然可以正确地称自己为“haskell编译器”。为了激活这个扩展,需要使用 -XPackageImports 扩展:

    ghc -XPackageImports main.hs

    这是一个 动态 标记,因此也可以在haskell源文件的“pragma”中指定。

    推荐文章