hw11: exercise 1
authorRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Sun, 28 Dec 2014 08:07:21 +0000 (13:37 +0530)
committerRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Sun, 28 Dec 2014 08:07:21 +0000 (13:37 +0530)
hw11/SExpr.hs

index 78ae98014062fa6b62ab8a3ca4259f720bee540f..c3f7d70f757a8cc7e00ac31f33b882974d6df8e7 100644 (file)
@@ -10,12 +10,19 @@ import Control.Applicative
 ------------------------------------------------------------
 --  1. Parsing repetitions
 ------------------------------------------------------------
+sequenceA  :: Applicative f => [f a] -> f [a]
+sequenceA [] = pure []
+sequenceA (x:xs) = (:) <$> x <*> sequenceA xs
+-- sequenceA (x:xs) = liftA2 (:) x (sequenceA xs)
+
+replicateA :: Applicative f => Int -> f a -> f [a]
+replicateA n x = sequenceA (replicate n x)
 
 zeroOrMore :: Parser a -> Parser [a]
-zeroOrMore p = undefined
+zeroOrMore p = oneOrMore p <|> pure []
 
 oneOrMore :: Parser a -> Parser [a]
-oneOrMore p = undefined
+oneOrMore p = liftA2 (:) p (zeroOrMore p)
 
 ------------------------------------------------------------
 --  2. Utilities