src/Pure/General/seq.ML
changeset 5864 30b6a3251813
parent 5558 64a8495201d1
child 6118 caa439435666
equal deleted inserted replaced
5863:9935800edf58 5864:30b6a3251813
   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);