From 0368c33cf40d264649be8ab2338aba79872762b2 Mon Sep 17 00:00:00 2001 From: Miguel Date: Tue, 19 Mar 2019 19:23:48 +0100 Subject: nicer word parser --- parser/main.hs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'parser') diff --git a/parser/main.hs b/parser/main.hs index 9840980..843f9a5 100644 --- a/parser/main.hs +++ b/parser/main.hs @@ -26,18 +26,12 @@ instance Monad (Parser a) where where g inp = case parse p inp of Just (a,b) -> parse (f a) b _ -> Nothing -parse :: Parser a b -> a -> Maybe (b,a) parse (Parser f) inp = f inp satisfy :: (Char -> Bool) -> Parser String Char satisfy f = Parser g where g (x:xs) | f x = Just (x,xs) g _ = Nothing -word :: String -> Parser String String -word w = Parser g where l = length w - g inp = if take l inp == w then Just (w,drop l inp) - else Nothing - space :: Parser String Char space = satisfy (==' ') @@ -50,6 +44,9 @@ notChar c = satisfy (/=c) num :: Parser String Int num = read <$> some (satisfy isDigit) +word :: String -> Parser String String +word (c:cs) = (:) <$> char c <*> word cs +word _ = pure "" parseOp op sig = (pure (op) <* many space <*> num <* many space <* char sig <* many space <*> num ) parseOps = (parseOp (+) '+' <|> parseOp (-) '-' <|> parseOp (*) '*' <|> parseOp (div) '/') -- cgit v1.2.3