src/Pure/ML-Systems/unsynchronized.ML
author huffman
Fri, 05 Mar 2010 13:56:04 -0800
changeset 35595 1785d387627a
parent 32737 76fa673eee8b
child 38799 712cb964d113
permissions -rw-r--r--
move take_proofs-related stuff to a new section

(*  Title:      Pure/ML-Systems/unsynchronized.ML
    Author:     Makarius

Raw ML references as unsynchronized state variables.
*)

structure Unsynchronized =
struct

datatype ref = datatype ref;

val op := = op :=;
val ! = !;

fun set flag = (flag := true; true);
fun reset flag = (flag := false; false);
fun toggle flag = (flag := not (! flag); ! flag);

fun change r f = r := f (! r);
fun change_result r f = let val (x, y) = f (! r) in r := y; x end;

fun inc i = (i := ! i + (1: int); ! i);
fun dec i = (i := ! i - (1: int); ! i);

end;