here `predfn` is used as the argument and `pred` is evaled in the body. Wouldn't this break unless `pred` is bound?