blob: 5a81819983e282290046632111f1621fcc271e72 [file] [log] [blame]
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>;