From 1eca5369046f242d745f64a836c2f5720e2a7b71 Mon Sep 17 00:00:00 2001 From: dan Date: Sun, 11 Apr 2021 10:23:39 +0200 Subject: refactor eSum --- src/MyLib.hs | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) (limited to 'src/MyLib.hs') diff --git a/src/MyLib.hs b/src/MyLib.hs index a5146b5..cc84930 100644 --- a/src/MyLib.hs +++ b/src/MyLib.hs @@ -60,12 +60,7 @@ parseLevel = go "" (Just []) go (prev ++ [x]) l xs evalAst :: Ast -> Maybe Value -evalAst (Expr name ast) = - case evalLevel ast of - Nothing -> Nothing - Just vals -> case getFunc name of - Nothing -> Nothing - Just f -> f vals +evalAst (Expr name ast) = fromMaybe Nothing (getFunc name <*> evalLevel ast) evalAst (Val val) = Just val evalLevel :: [Ast] -> Maybe [Value] @@ -81,11 +76,10 @@ funcs0 = [("sum",(eSum, 0))] eSum :: [Value] -> Maybe Value eSum [] = Just $ IntVal 0 -eSum (x:xs) = case coerceToInt x of - Nothing -> Nothing - Just a0 -> +eSum (x:xs) = let - Just (IntVal a1) = eSum xs + a1 = coerceToInt =<< eSum xs + a0 = coerceToInt x in - Just $ IntVal (a0 + a1) + IntVal <$> ((+) <$> a1 <*> a0) -- cgit v1.2.3