commit 3fbde99
shrub
·
2026-10-26 11:20:39 +0000 UTC
parent 6f43623
various simplifications
1 files changed,
+3,
-9
M
main.hs
M
main.hs
+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