commit 3fbde99

shrub  ·  2026-10-26 11:20:39 +0000 UTC
parent 6f43623
various simplifications
1 files changed,  +3, -9
+3, -9
 1@@ -60,9 +60,7 @@ parseRules (Statement stmt : rest) = -- if you see stmt split into stmt and rest
 2     let (recipeLines, remaining) = span isRecipe rest
 3         -- create a rule with the statement and recipe lines
 4         currentRule = mkRule stmt recipeLines
 5-    in case parseRules remaining of
 6-        Left message    -> Left message
 7-        Right nextRules -> Right (currentRule : nextRules)
 8+    in fmap (currentRule :) (parseRules remaining)
 9 
10 -- we take a string and a list of typed lines and produce a rule
11 mkRule :: String -> [TypedLine] -> Rule
12@@ -125,10 +123,7 @@ findRule name rules = find (\rule -> ruleName rule == name) rules
13 
14 -- take a list of rules, a target name and return its recipe
15 targetRecipes :: [Rule] -> String -> [String]
16-targetRecipes rules name =
17-    case findRule name rules of
18-        Nothing   -> []
19-        Just rule -> ruleRecipes rule
20+targetRecipes rules name = maybe [] ruleRecipes(findRule name rules)
21 
22 -- take a list of rules,
23 -- a target name and do DFS, return list of rules in correct order
24@@ -141,8 +136,7 @@ orderTarget rules wanted =
25                 -- run "orderTarget rules" on every prereq in prereqs
26                 -- this returns a list of dependency lists so use concat
27                 -- to just make it one list
28-                prereqOrders = map (orderTarget rules) prereqs
29-            in concat prereqOrders ++ [rule]
30+            in concatMap (orderTarget rules) prereqs ++ [rule]
31             -- xxx handle cycles and duplicates
32 
33 -- print and run a recipe