1 (* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh
2 * Jagannathan, and Stephen Weeks.
4 * MLton is released under a BSD-style license.
5 * See the file MLton-LICENSE for details.
8 functor Control(): CONTROL =
11 val defaults: (unit -> unit) list ref = ref []
13 val settings: {name: string,
14 value: (unit -> string)} list ref = ref []
16 fun setDefaults() = List.foreach(!defaults, fn f => f())
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)
27 List.fold(!settings, [], fn ({name, value}, ac) =>
28 {name = name, value = value()} :: ac)