Haskell 递归构建mongodb选择中的错误
当我在GHCI中键入此内容时:Haskell 递归构建mongodb选择中的错误,haskell,Haskell,当我在GHCI中键入此内容时: merge [] [(pack "text") =: (pack "hey"), (pack "text") =: (pack "there")] 我明白了: [ text: "hey", text: "there"] 但当我运行此代码时: tagsSelector :: Selector -> [String] -> Selector tagsSelector selector tags = case tags of [] -> s
merge [] [(pack "text") =: (pack "hey"), (pack "text") =: (pack "there")]
我明白了:
[ text: "hey", text: "there"]
但当我运行此代码时:
tagsSelector :: Selector -> [String] -> Selector
tagsSelector selector tags = case tags of
[] -> selector
t:ts -> tagsSelector (merge selector [(fieldToText Tags) =: t]) ts
这个测试用例:
testTagsSelector = TestCase (do
assertEqual "The tags selector for two tags should match..."
[(fieldToText Tags) =: "city", (fieldToText Tags) =: "urban"]
(tagsSelector [] ["city", "urban"]))
测试失败,原因是:
The tags selector for two tags should match...
expected: [ tags: "city", tags: "urban"]
but got: [ tags: "city"]
如果我在tagsSelection的输入中添加更多的标记,则生成的选择仅是列表中最后一个标记输入的字段。递归有什么问题
merge [pack "text" =: pack "hey"] [pack "text" =: pack "there"]
给予
因此,解决方案是:
tagsSelector :: Selector -> [String] -> Selector
tagsSelector selector tags = case tags of
[] -> selector
t:ts -> tagsSelector (merge [] (selector ++ [(fieldToText Tags) =: t])) ts
tagsSelector :: Selector -> [String] -> Selector
tagsSelector selector tags = case tags of
[] -> selector
t:ts -> tagsSelector (merge [] (selector ++ [(fieldToText Tags) =: t])) ts