You could have implemented it via Operator<T, T> and lift. That way, you don't need to wrap the source.