blob: 937cb18c31670a18639ff9524d3d0c57c3217486 [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>;