Persistent Filters:使用 Or 时在过滤器中进行 And 操作

Persistent Filters: And operation in filters when using Or

Persistent 有一个 OR 过滤器 ||. 但它似乎没有相应的 &&. 我想做类似 A && (B || C) && (D || E) 的事情,但我不确定最干净的方法做吧。

我想我可以创建所有组合,如 (A && B && D) || (A && C && D) || (A && B && E) || (A && C && E)。即使对于这个简单的例子,它也变得相当笨拙。不确定 persistent 是否有更好的方法来做到这一点。

代码在我执行时编译(在 selectList 内)[A] ++ ([B] ||. [C]), etc. 但不确定它是否等同于我想要的。

谢谢!

您可以将 ++ or <> 和过滤器列表一起使用。

来自Persistent manual

people <- selectList [PersonAge >. 25, PersonAge <=. 30] []
liftIO $ print people

The list of filters is ANDed together, so that our constraint means "age is greater than 25 AND age is less than or equal to 30". We’ll describe ORing later.