我最近遇到了需要将谓词函数传递给另一个函数的情况,而且我所寻找的逻辑通常基本上是“这个值是否与这个模式匹配?”
模式匹配似乎在声明、do块和列表推导式中更受欢迎,但有许多函数采用谓词a -> Bool,以某种方式传入模式会非常方便。例如,takeWhile,until,find,span,等。
到目前为止,我一直在做\a -> case a of MyCons _ -> True; otherwise -> False,或者写一个命名函数,let myPred (MyCons _) = True; myPred _ = False in但它们看起来都非常丑陋而且不太惯用。“明显的”(和错误的)方式会是这样的,\(MyCons _) -> True但是这会因为偏袒而自然而然地引发错误,即使如此,感觉也必须有一种更清洁的方式。
有没有更简洁/干净的方法来做这种事情?还是我完全以错误的方式处理事情?
haskell ×1