listを受け取った時は'foo'が要素にある場合に真を返し、
strを受け取った時は'foo'を部分列として持つ場合に真を返す

has_foo という名前から連想される多相関数としては、極めて妥当な振舞いだと思うけどね