Import Upstream version 20180207
[hcoop/debian/mlton.git] / lib / mlton / basic / control.fun
1 (* Copyright (C) 1999-2005 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 functor Control(): CONTROL =
9 struct
10
11 val defaults: (unit -> unit) list ref = ref []
12
13 val settings: {name: string,
14 value: (unit -> string)} list ref = ref []
15
16 fun setDefaults() = List.foreach(!defaults, fn f => f())
17
18 fun control{name, default, toString} =
19 let val r = ref default
20 in List.push(settings, {name = name,
21 value = fn () => toString(!r)})
22 ; List.push(defaults, fn () => r := default)
23 ; r
24 end
25
26 fun all() =
27 List.fold(!settings, [], fn ({name, value}, ac) =>
28 {name = name, value = value()} :: ac)
29
30 end