@@ -68,6 +68,8 @@ import Data.Binary (Binary (..), getWord8, putWord8)
68import Data.List (inits, isPrefixOf, tails)
68import Data.List (inits, isPrefixOf, tails)
69import Data.Maybe (isJust)
69import Data.Maybe (isJust)
70import Data.Monoid (Monoid, mappend, mempty)
70import Data.Monoid (Monoid, mappend, mempty)
72+import qualified Data.Set as S
73--------------------------------------------------------------------------------
75--------------------------------------------------------------------------------
@@ -108,7 +110,7 @@ data Pattern
108 | Complement Pattern
110 | Complement Pattern
109 | And Pattern Pattern
111 | And Pattern Pattern
110 | Glob [GlobComponent]
112 | Glob [GlobComponent]
111− | List [Identifier] -- TODO Maybe use a set here
113+ | List (Set Identifier)
112 | Regex String
114 | Regex String
113 | Version (Maybe String)
115 | Version (Maybe String)
114 deriving (Show)
116 deriving (Show)
@@ -162,7 +164,7 @@ fromGlob = Glob . parse'
162--------------------------------------------------------------------------------
164--------------------------------------------------------------------------------
163-- | Create a 'Pattern' from a list of 'Identifier's it should match
165-- | Create a 'Pattern' from a list of 'Identifier's it should match
164fromList :: [Identifier] -> Pattern
166fromList :: [Identifier] -> Pattern
165−fromList = List
167+fromList = List . S.fromList
168--------------------------------------------------------------------------------
170--------------------------------------------------------------------------------
@@ -205,7 +207,7 @@ matches Everything _ = True
205matches (Complement p) i = not $ matches p i
207matches (Complement p) i = not $ matches p i
206matches (And x y) i = matches x i && matches y i
208matches (And x y) i = matches x i && matches y i
207matches (Glob p) i = isJust $ capture (Glob p) i
209matches (Glob p) i = isJust $ capture (Glob p) i
208−matches (List l) i = i `elem` l
210+matches (List l) i = i `S.member` l
209matches (Regex r) i = toFilePath i =~ r
211matches (Regex r) i = toFilePath i =~ r
210matches (Version v) i = identifierVersion i == v
212matches (Version v) i = identifierVersion i == v