from collections.abc import MutableSequence from dataclasses import dataclass from typing import Generic, TypeVar T = TypeVar("T") @dataclass(frozen=True) class ChangeEvent(Generic[T]): index: int item: T path: MutableSequence[int] | None = None @dataclass(frozen=True) class AddItemEvent(ChangeEvent[T]): item: T @dataclass(frozen=True) class SetItemEvent(ChangeEvent[T]): item: T @dataclass(frozen=True) class RemoveItemEvent(ChangeEvent[T]): item: T