3

セットの要素が述語を満たすかどうかを確認する必要があります。これまでリストを使ってきたので、

any myPredicate sx

しかし、私の場合はセットを使用する方が意味的により正確です (そしておそらくより効率的です)。ただしany、セットはなく、次のような行がたくさんあります ( Data.Set as S):

any myPredicate $ S.toList mySet

モノイドなどのように、これらすべての変換でコードを散らかさない方法はありますか?

(つまり、 を定義する以外に方法があるに違いありませanyS p s = any p $ S.toList sData.Set

4

2 に答える 2

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

または、さらに簡単に言えば、aSetFoldable

import qualified Data.Foldable as F

anyS :: (a -> Bool) -> Set a -> Bool
anyS = F.any
于 2013-10-07T10:34:26.703 に答える
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
于 2013-10-07T10:42:03.823 に答える