不在范围内:`HashMap.lookup'

时间:2014-12-30 11:25:28

标签: json haskell hashmap

我遇到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

2 个答案:

答案 0 :(得分:3)

尝试添加

import qualified Data.HashMap.Strict as HashMap

在源文件的顶部。

答案 1 :(得分: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