diff options
Diffstat (limited to 'frontend/utilities.dcl')
-rw-r--r-- | frontend/utilities.dcl | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/frontend/utilities.dcl b/frontend/utilities.dcl index a513a36..e6fa88d 100644 --- a/frontend/utilities.dcl +++ b/frontend/utilities.dcl @@ -120,6 +120,32 @@ iterateSt op st :== iterate_st op st = iterate_st op st = st +mapFilterYesSt f l st + :== map_filter_yes_st l st + where + map_filter_yes_st [] st + = ([], st) + map_filter_yes_st [h:t] st + #! (opt_f_h , st) = f h st + (t2, st) = map_filter_yes_st t st + f_h_t2 = optCons opt_f_h t2 + st = st + = (f_h_t2, st) + +iMapFilterYesSt f fr to st + :== i_map_filter_yes_st fr to st + where + i_map_filter_yes_st fr to st + | fr >= to + = ([], st) + #! (opt_f_fr, st) = f fr st + (t, st) = i_map_filter_yes_st (inc fr) to st + f_fr_t2 = optCons opt_f_fr t + st = st + = (f_fr_t2, st) + +optCons :: !(Optional .a) !u:[.a] -> v:[.a] ,[u <= v] + revAppend :: ![a] ![a] -> [a] // Reverse the list using the second argument as accumulator. revMap :: !(.a -> .b) ![.a] !u:[.b] -> u:[.b] |