implement binary operators and to_proc