blob: 14cef3df5b45ac74be89a7c175f6a3ac1ad08b68 [file] [log] [blame]
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() {}