Haskell 递归构建mongodb选择中的错误

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

当我在GHCI中键入此内容时:

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