sig
  type 'a boolean =
      And of 'Bool.boolean list
    | Or of 'Bool.boolean list
    | Not of 'Bool.boolean
    | Atom of 'a
    | True
    | False
  val eval : ('-> bool) -> 'Bool.boolean -> bool
  val iter : ('-> unit) -> 'Bool.boolean -> unit
  val map : ('-> 'b) -> 'Bool.boolean -> 'Bool.boolean
end