use map for faster backend name lookup
This commit is contained in:
parent
85d17a698d
commit
aad8cfe718
1 changed files with 7 additions and 3 deletions
10
Backend.hs
10
Backend.hs
|
@ -32,6 +32,8 @@ import qualified Backend.Hash
|
||||||
import qualified Backend.WORM
|
import qualified Backend.WORM
|
||||||
import qualified Backend.URL
|
import qualified Backend.URL
|
||||||
|
|
||||||
|
import qualified Data.Map as M
|
||||||
|
|
||||||
list :: [Backend]
|
list :: [Backend]
|
||||||
list = Backend.Hash.backends ++ Backend.WORM.backends ++ Backend.URL.backends
|
list = Backend.Hash.backends ++ Backend.WORM.backends ++ Backend.URL.backends
|
||||||
|
|
||||||
|
@ -116,7 +118,9 @@ lookupBackendName :: String -> Backend
|
||||||
lookupBackendName s = fromMaybe unknown $ maybeLookupBackendName s
|
lookupBackendName s = fromMaybe unknown $ maybeLookupBackendName s
|
||||||
where
|
where
|
||||||
unknown = error $ "unknown backend " ++ s
|
unknown = error $ "unknown backend " ++ s
|
||||||
|
|
||||||
maybeLookupBackendName :: String -> Maybe Backend
|
maybeLookupBackendName :: String -> Maybe Backend
|
||||||
maybeLookupBackendName s = headMaybe matches
|
maybeLookupBackendName s = M.lookup s nameMap
|
||||||
where
|
|
||||||
matches = filter (\b -> s == B.name b) list
|
nameMap :: M.Map String Backend
|
||||||
|
nameMap = M.fromList $ zip (map B.name list) list
|
||||||
|
|
Loading…
Add table
Reference in a new issue