Lines Matching refs:CharSet

30 module Data.CharSet
33 CharSet(..)
87 import Data.CharSet.ByteSet (ByteSet)
88 import qualified Data.CharSet.ByteSet as ByteSet
103 data CharSet = CharSet constructor
111 instance IsString CharSet where
115 charSet :: Bool -> IntSet -> CharSet
116 charSet b s = CharSet b (ByteSet.fromList (fmap headByte (I.toAscList s))) s
125 pos :: IntSet -> CharSet
128 neg :: IntSet -> CharSet
131 (\\) :: CharSet -> CharSet -> CharSet
139 build :: (Char -> Bool) -> CharSet
143 map :: (Char -> Char) -> CharSet -> CharSet
144 map f (CharSet True _ i) = pos (I.map (fromEnum . f . toEnum) i)
145 map f (CharSet False _ i) = fromList $ P.map f $ P.filter (\x -> fromEnum x `I.notMember` i) [ul..u…
148 isComplemented :: CharSet -> Bool
149 isComplemented (CharSet True _ _) = False
150 isComplemented (CharSet False _ _) = True
153 toList :: CharSet -> String
154 toList (CharSet True _ i) = P.map toEnum (I.toList i)
155 toList (CharSet False _ i) = P.filter (\x -> fromEnum x `I.notMember` i) [ul..uh]
158 toAscList :: CharSet -> String
159 toAscList (CharSet True _ i) = P.map toEnum (I.toAscList i)
160 toAscList (CharSet False _ i) = P.filter (\x -> fromEnum x `I.notMember` i) [ul..uh]
163 empty :: CharSet
166 singleton :: Char -> CharSet
170 full :: CharSet
174 null :: CharSet -> Bool
175 null (CharSet True _ i) = I.null i
176 null (CharSet False _ i) = I.size i == numChars
180 size :: CharSet -> Int
181 size (CharSet True _ i) = I.size i
182 size (CharSet False _ i) = numChars - I.size i
185 insert :: Char -> CharSet -> CharSet
186 insert c (CharSet True _ i) = pos (I.insert (fromEnum c) i)
187 insert c (CharSet False _ i) = neg (I.delete (fromEnum c) i)
190 range :: Char -> Char -> CharSet
195 delete :: Char -> CharSet -> CharSet
196 delete c (CharSet True _ i) = pos (I.delete (fromEnum c) i)
197 delete c (CharSet False _ i) = neg (I.insert (fromEnum c) i)
200 complement :: CharSet -> CharSet
201 complement (CharSet True s i) = CharSet False s i
202 complement (CharSet False s i) = CharSet True s i
205 union :: CharSet -> CharSet -> CharSet
206 union (CharSet True _ i) (CharSet True _ j) = pos (I.union i j)
207 union (CharSet True _ i) (CharSet False _ j) = neg (I.difference j i)
208 union (CharSet False _ i) (CharSet True _ j) = neg (I.difference i j)
209 union (CharSet False _ i) (CharSet False _ j) = neg (I.intersection i j)
212 intersection :: CharSet -> CharSet -> CharSet
213 intersection (CharSet True _ i) (CharSet True _ j) = pos (I.intersection i j)
214 intersection (CharSet True _ i) (CharSet False _ j) = pos (I.difference i j)
215 intersection (CharSet False _ i) (CharSet True _ j) = pos (I.difference j i)
216 intersection (CharSet False _ i) (CharSet False _ j) = neg (I.union i j)
219 difference :: CharSet -> CharSet -> CharSet
220 difference (CharSet True _ i) (CharSet True _ j) = pos (I.difference i j)
221 difference (CharSet True _ i) (CharSet False _ j) = pos (I.intersection i j)
222 difference (CharSet False _ i) (CharSet True _ j) = neg (I.union i j)
223 difference (CharSet False _ i) (CharSet False _ j) = pos (I.difference j i)
226 member :: Char -> CharSet -> Bool
227 member c (CharSet True b i)
230 member c (CharSet False b i)
235 notMember :: Char -> CharSet -> Bool
239 fold :: (Char -> b -> b) -> b -> CharSet -> b
240 fold f z (CharSet True _ i) = I.fold (f . toEnum) z i
241 fold f z (CharSet False _ i) = foldr f z $ P.filter (\x -> fromEnum x `I.notMember` i) [ul..uh]
244 filter :: (Char -> Bool) -> CharSet -> CharSet
245 filter p (CharSet True _ i) = pos (I.filter (p . toEnum) i)
246 filter p (CharSet False _ i) = neg $ foldr (I.insert) i $ P.filter (\x -> (x `I.notMember` i) && no…
249 partition :: (Char -> Bool) -> CharSet -> (CharSet, CharSet)
250 partition p (CharSet True _ i) = (pos l, pos r)
252 partition p (CharSet False _ i) = (neg (foldr I.insert i l), neg (foldr I.insert i r))
256 overlaps :: CharSet -> CharSet -> Bool
257 overlaps (CharSet True _ i) (CharSet True _ j) = not (I.null (I.intersection i j))
258 overlaps (CharSet True _ i) (CharSet False _ j) = not (I.isSubsetOf j i)
259 overlaps (CharSet False _ i) (CharSet True _ j) = not (I.isSubsetOf i j)
260 overlaps (CharSet False _ i) (CharSet False _ j) = any (\x -> I.notMember x i && I.notMember x j) […
263 isSubsetOf :: CharSet -> CharSet -> Bool
264 isSubsetOf (CharSet True _ i) (CharSet True _ j) = I.isSubsetOf i j
265 isSubsetOf (CharSet True _ i) (CharSet False _ j) = I.null (I.intersection i j)
266 isSubsetOf (CharSet False _ i) (CharSet True _ j) = all (\x -> I.member x i && I.member x j) [ol..o…
267 isSubsetOf (CharSet False _ i) (CharSet False _ j) = I.isSubsetOf j i
270 fromList :: String -> CharSet
274 fromAscList :: String -> CharSet
278 fromDistinctAscList :: String -> CharSet
303 instance Data CharSet where
332 fromCharSet :: CharSet -> (Bool, IntSet)
333 fromCharSet (CharSet b _ i) = (b, i)
336 toCharSet :: IntSet -> CharSet
340 instance Eq CharSet where
343 instance Ord CharSet where
346 instance Bounded CharSet where
351 toArray :: CharSet -> UArray Char Bool
354 instance Show CharSet where
359 instance Read CharSet where
369 instance Semigroup CharSet where
372 instance Monoid CharSet where