Understanding the Error in Union Creation
Why does the union here returns an error?
PS: reposted because previously I forgot part of the code;
import { Chunk, Data, Match, Option, pipe } from "effect";
export interface Decider<in C, in out S, in out E> {
readonly initialState: S;
decide: (c: C, s: S) => Chunk.Chunk<E>;
evolve: (s: S, e: E) => S;
}
export const make: <C, S, E>(
decide: (c: C, s: S) => Chunk.Chunk<E>,
evolve: (s: S, e: E) => S,
initialState: S,
) => Decider<C, S, E> = (decide, evolve, initialState) => ({
initialState,
decide,
evolve,
});
class AddOddNumber extends Data.TaggedClass("AddOddNumber")<{
readonly value: number;
}> {}
class AddEvenNumber extends Data.TaggedClass("AddEvenNumber")<{
readonly value: number;
}> {}
type Command = AddOddNumber | AddEvenNumber;
class OddNumberAdded extends Data.TaggedClass("OddNumberAdded")<{
readonly value: number;
}> {}
class EvenNumberAdded extends Data.TaggedClass("EvenNumberAdded")<{
readonly value: number;
}> {}
type Event = OddNumberAdded | EvenNumberAdded;
type State = unknown;
const decider: Decider<Command, Option.Option<State>, Event> = make(
() => Chunk.of(new OddNumberAdded({ value: 1 })),
(state, event) =>
pipe(
event,
Match.typeTags<Event>()({
OddNumberAdded: (_) => state,
EvenNumberAdded: (_) => state,
}),
),
Option.none(),
);import { Chunk, Data, Match, Option, pipe } from "effect";
export interface Decider<in C, in out S, in out E> {
readonly initialState: S;
decide: (c: C, s: S) => Chunk.Chunk<E>;
evolve: (s: S, e: E) => S;
}
export const make: <C, S, E>(
decide: (c: C, s: S) => Chunk.Chunk<E>,
evolve: (s: S, e: E) => S,
initialState: S,
) => Decider<C, S, E> = (decide, evolve, initialState) => ({
initialState,
decide,
evolve,
});
class AddOddNumber extends Data.TaggedClass("AddOddNumber")<{
readonly value: number;
}> {}
class AddEvenNumber extends Data.TaggedClass("AddEvenNumber")<{
readonly value: number;
}> {}
type Command = AddOddNumber | AddEvenNumber;
class OddNumberAdded extends Data.TaggedClass("OddNumberAdded")<{
readonly value: number;
}> {}
class EvenNumberAdded extends Data.TaggedClass("EvenNumberAdded")<{
readonly value: number;
}> {}
type Event = OddNumberAdded | EvenNumberAdded;
type State = unknown;
const decider: Decider<Command, Option.Option<State>, Event> = make(
() => Chunk.of(new OddNumberAdded({ value: 1 })),
(state, event) =>
pipe(
event,
Match.typeTags<Event>()({
OddNumberAdded: (_) => state,
EvenNumberAdded: (_) => state,
}),
),
Option.none(),
);PS: reposted because previously I forgot part of the code;
