changed to :condition and :otherwise; simplified the functor by returning a proc; using instance exec to always eval within the receivers context