Speculating, I see three reasons:
-
They can add members to
Effect
without risking collisions with current or futurePublisher
APIs. -
They can add initializers to
Effect
. For example, you can sayEffect(value: 123)
. SincePublisher
is a protocol, you cannot call an initializer directly on it. You cannot define aninit
that lets you sayPublisher(value: 123)
. Instead you have to use a conforming type likeJust(123)
. -
They can add static members to
Effect
and you can refer to them with dot-syntax. For example, you can say.none
or.future(...)
or.result(...)
in a context where the type is deduced asEffect
. You cannot use dot-syntax to create aPublisher
, even in a context where the type is deduced as conforms-to-Publisher
.