Import Upstream version 20180207
[hcoop/debian/mlton.git] / lib / mlton / basic / iterate.sml
1 (* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh
2 * Jagannathan, and Stephen Weeks.
3 *
4 * MLton is released under a BSD-style license.
5 * See the file MLton-LICENSE for details.
6 *)
7 (*-------------------------------------------------------------------*)
8 (* Iterate *)
9 (*-------------------------------------------------------------------*)
10
11 structure Iterate: ITERATE =
12 struct
13
14 fun iterate(start, isTerm,next) =
15 let fun loop s = if isTerm s then s else loop(next s)
16 in loop start
17 end
18
19 fun whileDo(test, f) = iterate((),not o test, f)
20
21 fun repeatUntil(f, test) = (f() ; iterate((), test, f))
22
23 end