Open DylanRJohnston opened 5 years ago
Example
/* Type 'Stream<3>' is not assignable to type 'Stream<number>'.
Types of property '_ils' are incompatible.
Type 'InternalListener<3>[]' is not assignable to type 'InternalListener<number>[]'.
Type 'InternalListener<3>' is not assignable to type 'InternalListener<number>'.
Type 'number' is not assignable to type '3'.
*/
const number$: xs.Stream<number> = xs.Stream.of(3 as const)
// Totally fine
const number$: xs.Sink<number> = xs.Stream.of(3 as const)
More concretely, we have a general event sink that expects events payloads of a certain generic structure, and then a system generating events with a more specific type, e.g. a string literal for the event type.
Hey Staltz, I was wondering if you'd be open to exporting two interface subtypes of
Stream<A>
, one that contains all of the methods that are contravariant inA
maybe calledSink<A>
and one that contains all of the methods that are covariant inA
maybe calledSource<A>
. This would allow for proper subtyping of methods that are expecting source / sink streams asStream<A>
is currently invariant inA
.For example
Most of the covariant methods on
Stream<A>
are static, with the exception ofremember
anddebug
. So the Source type makes less sense.