2013-10-07 18 views
3

我需要检查集合中的任何元素是否满足谓词。到目前为止,我已经使用列表去过,所以我只是用Data.Set的`any`函数

any myPredicate sx 

但在我的情况下,使用一组在语义上更正确的(也可能是更有效)。但是没有any换套,和我结了很多像这样(Data.Set as S)线:

any myPredicate $ S.toList mySet 

有没有办法不要乱扔垃圾我与所有这些转换,就像类群或类似代码.. 。?

(我的意思是,必须有除了定义anyS p s = any p $ S.toList s的方式,否则为什么不是在Data.Set ...?)

回答

7

如何

import qualified Data.Set as Set 
import   Data.Set (Set) 

orS :: Set Bool -> Bool 
orS = Set.foldr (||) False 

anyS :: (a -> Bool) -> Set a -> Bool 
anyS p = orS . Set.map p 

,或者更简单地说,因为一个SetFoldable

import qualified Data.Foldable as F 

anyS :: (a -> Bool) -> Set a -> Bool 
anyS = F.any 
+2

第二溶液是我在找什么,谢谢! – bigstones

2
import Data.Set (Set) 
import qualified Data.Set as Set 

anyS :: (a -> Bool) -> Set a -> Bool 
anyS predicate s = not $ Set.null $ Set.filter predicate s 
相关问题