summaryrefslogtreecommitdiffstats
path: root/ocamlbuild/bool.ml
diff options
context:
space:
mode:
Diffstat (limited to 'ocamlbuild/bool.ml')
-rw-r--r--ocamlbuild/bool.ml38
1 files changed, 38 insertions, 0 deletions
diff --git a/ocamlbuild/bool.ml b/ocamlbuild/bool.ml
new file mode 100644
index 000000000..4fa734e92
--- /dev/null
+++ b/ocamlbuild/bool.ml
@@ -0,0 +1,38 @@
+(***********************************************************************)
+(* ocamlbuild *)
+(* *)
+(* Nicolas Pouillard, Berke Durak, projet Gallium, INRIA Rocquencourt *)
+(* *)
+(* Copyright 2007 Institut National de Recherche en Informatique et *)
+(* en Automatique. All rights reserved. This file is distributed *)
+(* under the terms of the Q Public License version 1.0. *)
+(* *)
+(***********************************************************************)
+
+(* $Id$ *)
+(* Original author: Berke Durak *)
+(* Bool *)
+
+type 'a boolean = And of 'a boolean list | Or of 'a boolean list | Not of 'a boolean | Atom of 'a | True | False;;
+
+let rec eval f = function
+ | And l -> List.for_all (eval f) l
+ | Or l -> List.exists (eval f) l
+ | Not x -> not (eval f x)
+ | Atom a -> f a
+ | True -> true
+ | False -> false
+;;
+let rec iter f = function
+ | (And l|Or l) -> List.iter (iter f) l
+ | Not x -> iter f x
+ | Atom a -> f a
+ | True|False -> ()
+;;
+let rec map f = function
+ | And l -> And(List.map (map f) l)
+ | Or l -> Or(List.map (map f) l)
+ | Not x -> Not(map f x)
+ | Atom a -> Atom(f a)
+ | (True|False) as b -> b
+;;