I routinely sanitize the inputs to a function using this sort of technique:
funcI[x_Integer] := Print[x];
But it doesn't work with Booleans.
func[x_Boolean] := Print[x]; func (* doesn't execute, as expected *) func[True] (* doesn't execute, but it should, right? *)
As a workaround, I can use
func2[x_ /; BooleanQ[x]] := Print[x];, but why doesn't the simpler formulation work?
func2[True] (* works just fine *)