我遇到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
答案 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.Lazy
或Data.HashMap.Strict
。