signature Bool = sig (* * Type *) datatype bool = true | false; (* * Operation *) val not : bool -> bool end; structure Bool : Bool = struct type bool = bool val not = not end;