Also, I really don't like this return type, because it should really be: `Either[TypedPipe[T], TypedPipe[V]]` but we can't actually tell which until we see the data.

Either ALL items will be T, or all will be V.

I still think, `f: (T, Option[U]) => V` is the way to go here.