In Haskell, you can have your cake and eat it too. Normally, the language follows your comments philosophy, but it's really easy to add arbitrary truthiness and falsiness definitions:
class ToBool a where
toBool :: a -> Bool
if' :: ToBool a => a -> b -> b -> b
if' cond th el = if toBool cond then th else el
And add instances like these:
instance ToBool Int where
toBool 0 = False
ToBool _ = True
instance ToBool String where
toBool "" = False
toBool _ = True
Or even:
instance ToBool TimeStamp where
toBool = not . isMidnight
Lisp, of course, can do similar things via Macros.