const HInvalid invalidExample = HInvalidComposite(
  [
    HInvalidLeaf(0),
    HInvalidChild(
      HInvalidLeaf(0),
    ),
    HInvalidError("error message"),
  ],
);
typedef HInvalid = HBase<HKindInvalid>;
typedef HInvalidComposite<CHILD extends HInvalid>
    = HBaseComposite<HKindInvalid, CHILD>;
typedef HInvalidChild<CHILD extends HInvalid> = HBaseChild<HKindInvalid, CHILD>;
typedef HInvalidLeaf = HBaseLeaf<HKindInvalid>;
typedef HInvalidError = HBaseError<HKindInvalid>;

abstract class HBase<HKT extends HKind> implements Kind<HKT> {}

class HBaseComposite<HKT extends HKindValid, CHILD extends HBase<HKT>>
    implements HBase<HKT> {
  final List<CHILD> children;
  const HBaseComposite(
    final this.children,
  );
}

class HBaseChild<HKT extends HKindValid, CHILD extends HBase<HKT>>
    implements HBase<HKT> {
  final CHILD child;
  const HBaseChild(
    final this.child,
  );
}

class HBaseLeaf<HKT extends HKindValid> implements HBase<HKT> {
  final int data;
  const HBaseLeaf(
    final this.data,
  );
}

class HBaseError<HKT extends HKindInvalid> implements HBase<HKT> {
  final String errorMessage;
  const HBaseError(
    final this.errorMessage,
  );
}

abstract class Kind<HKT extends HKind> {}

abstract class HKind {}

abstract class HKindValid implements HKind {}

abstract class HKindInvalid implements HKindValid {}

main() {}
