From 0bb04c08d8232187dc73265e9a675f84c8e48d26 Mon Sep 17 00:00:00 2001 From: Ramakrishnan Muthukrishnan <ram@rkrishnan.org> Date: Sat, 27 Dec 2014 15:29:51 +0530 Subject: [PATCH] hw10: exercises 4 and 5 --- hw10/AParser.hs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/hw10/AParser.hs b/hw10/AParser.hs index f506fcb..04eb6ad 100644 --- a/hw10/AParser.hs +++ b/hw10/AParser.hs @@ -96,3 +96,17 @@ abParser_ = (\_ _ -> ()) <$> char 'a' <*> char 'b' intPair :: Parser [Integer] intPair = (\x _ z -> x : z : []) <$> posInt <*> char ' ' <*> posInt + +-- Exercise 4 +-- class Applicative f => Alternative f where +-- empty :: f a +-- (<|>) :: f a -> f a -> f a +instance Alternative Parser where + empty = Parser(\_ -> Nothing) + (Parser p1) <|> (Parser p2) = Parser (\inp -> case (p1 inp) of + Nothing -> (p2 inp) + Just v -> Just v) + +-- exercise 5: int or Uppercase +intOrUppercase :: Parser () +intOrUppercase = ((\_ -> ()) <$> posInt) <|> ((\_ -> ()) <$> (satisfy isUpper)) -- 2.45.2