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

abstract class HKind {}

abstract class HKindInvalid implements HKindValid {}

abstract class HKindValid implements HKind {}

abstract class Kind<HKT extends HKind> {}

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

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

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

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

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