-- | A set of strings to match. module Graphics.Text.Font.Choose.StrSet(StrSet(..), module S, validStrSet) where import Data.Set (Set) import qualified Data.Set as S import Data.MessagePack (MessagePack(..)) import Test.QuickCheck (Arbitrary(..)) newtype StrSet = StrSet { unStrSet :: Set String } deriving (Eq, Show, Read) instance MessagePack StrSet where toObject = toObject . S.toList . unStrSet fromObject msg = StrSet <$> S.fromList <$> fromObject msg instance Arbitrary StrSet where arbitrary = StrSet <$> S.map (filter (/= '\0')) <$> arbitrary validStrSet :: StrSet -> Bool validStrSet (StrSet self) = notElem '\0' `all` self