Understanding the Error in Union Creation

Why does the union here returns an error?
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;
Was this page helpful?