From 2829f5999e1f58bd8f2f7bc1d020bfdb8b9429c0 Mon Sep 17 00:00:00 2001 From: Ramakrishnan Muthukrishnan <ram@rkrishnan.org> Date: Sun, 28 Dec 2014 13:37:21 +0530 Subject: [PATCH] hw11: exercise 1 --- hw11/SExpr.hs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/hw11/SExpr.hs b/hw11/SExpr.hs index 78ae980..c3f7d70 100644 --- a/hw11/SExpr.hs +++ b/hw11/SExpr.hs @@ -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 -- 2.45.2