equal
deleted
inserted
replaced
169 |
169 |
170 fun succeed x = single x; |
170 fun succeed x = single x; |
171 fun fail _ = empty; |
171 fun fail _ = empty; |
172 |
172 |
173 |
173 |
174 fun THEN (f, g) x = flat (map g (f x)); |
174 fun op THEN (f, g) x = flat (map g (f x)); |
175 |
175 |
176 fun ORELSE (f, g) x = |
176 fun op ORELSE (f, g) x = |
177 (case pull (f x) of |
177 (case pull (f x) of |
178 None => g x |
178 None => g x |
179 | some => make (fn () => some)); |
179 | some => make (fn () => some)); |
180 |
180 |
181 fun APPEND (f, g) x = |
181 fun op APPEND (f, g) x = |
182 append (f x, make (fn () => pull (g x))); |
182 append (f x, make (fn () => pull (g x))); |
183 |
183 |
184 |
184 |
185 fun EVERY fs = foldr THEN (fs, succeed); |
185 fun EVERY fs = foldr THEN (fs, succeed); |
186 fun FIRST fs = foldr ORELSE (fs, fail); |
186 fun FIRST fs = foldr ORELSE (fs, fail); |