This signature should just be `[A](f: (A,A) => A): Process1[A,A]`. You will automatically be able to accept subtypes of `A` by the contravariance on `Process1`'s first type arg.