Consider the following transcript. Objective Caml version 3.10.0 # string_of_bool true == string_of_bool true;; - : bool = true # String.fill (string_of_bool true) 0 4 '@';; - : unit = () # string_of_bool true;; - : string = "@@@@" Perhaps this has been discussed before, but I found this to be disturbing. It seems easy enough to fix this problem, so that, for example, print_string (string_of_bool true) always does the same thing. The "correct" strategy seems to be used for string_of_float infinity: # string_of_float infinity;; - : string = "inf" # string_of_float infinity == string_of_float infinity;; - : bool = false Nathan Mishra-Linger