2013-10-07 16 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 
相關問題