【问题标题】:Not in scope: `HashMap.lookup'不在范围内:`HashMap.lookup'
【发布时间】:2015-02-26 13:35:20
【问题描述】:

我在使用 HashMap.lookup 函数时遇到问题。请就如何修复以下代码提供您的建议(我收到不在范围内:`HashMap.lookup' 错误):

instance JSON.FromJSON Document where
  parseJSON (JSON.Object v) = maybe mzero parser $ HashMap.lookup "document" v
    where parser (JSON.Object v') = Document <$> v' JSON..: "name"
                                        <*> v' JSON..: "content"
          parser _           = mzero
  parseJSON _          = mzero

【问题讨论】:

    标签: json haskell hashmap


    【解决方案1】:

    尝试添加

    import qualified Data.HashMap.Strict as HashMap
    

    在您的源文件之上。

    【讨论】:

      【解决方案2】:

      这取决于您如何导入包。如果你使用类似的东西:

      import Data.HashMap
      

      那么你就可以简单的访问Data.HashMap.lookup函数了:

      lookup
      

      但是您可能与Prelude.lookup 有冲突,在这种情况下,您可以添加一个显式的Prelude 导入隐藏lookup 函数,即添加:

      import Prelude hiding (lookup)
      

      在文件顶部,或使用全名:

      Data.HashMap.lookup
      

      请注意,您不能简单地使用HashMap.lookup。该模块被称为Data.HashMap 而不仅仅是HashMap


      你可能想给包起一个别名,例如:

      import Data.HashMap as H
      

      然后使用:

      H.lookup key hashmap
      

      如果它们不与其他东西重叠,这仍然允许使用非前缀版本的类型/函数。如果您想安全起见,可以使用合格的导入:

      import qualified Data.HashMap as H
      

      这样,HashMap 模块中的所有内容 必须H. 为前缀。甚至类型:

      -- note: H.HashMap *not* HashMap:
      somefunction :: H.HashMap String [Int] -> [Int]
      

      没有qualified也可以写:

      somefunction :: HashMap String [Int] -> [Int]
      

      而且你只能在调用某些函数时使用H.


      请注意,有不同的包证明HashMap。您可能想使用Data.HashMap.LazyData.HashMap.Strict

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-05
        • 1970-01-01
        • 2021-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多