avoid list lookup by parseToken

Minor optimisation to parsing of a preferred content expression.
This commit is contained in:
Joey Hess 2019-05-14 13:08:51 -04:00
parent c1957b6aeb
commit aa7710982b
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
5 changed files with 17 additions and 21 deletions

View file

@ -20,8 +20,7 @@
module Utility.Matcher (
Token(..),
Matcher(..),
token,
tokens,
syntaxToken,
generate,
match,
matchM,
@ -47,16 +46,13 @@ data Matcher op = MAny
deriving (Show, Eq)
{- Converts a word of syntax into a token. Doesn't handle operations. -}
token :: String -> Token op
token "and" = And
token "or" = Or
token "not" = Not
token "(" = Open
token ")" = Close
token t = error $ "unknown token " ++ t
tokens :: [String]
tokens = words "and or not ( )"
syntaxToken :: String -> Either String (Token op)
syntaxToken "and" = Right And
syntaxToken "or" = Right Or
syntaxToken "not" = Right Not
syntaxToken "(" = Right Open
syntaxToken ")" = Right Close
syntaxToken t = Left $ "unknown token " ++ t
{- Converts a list of Tokens into a Matcher. -}
generate :: [Token op] -> Matcher op