Subtrait work
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Julien Valverdé
2024-02-04 03:19:33 +01:00
parent 781567a3bd
commit f6d2d68eee
3 changed files with 31 additions and 42 deletions

View File

@@ -1,6 +1,6 @@
import { Call, Fn, Pipe, Tuples } from "hotscript"
import { Call, ComposeLeft, Fn, Pipe, Tuples } from "hotscript"
import { AbstractClass, Class, Opaque } from "type-fest"
import { AbstractTag, Trait, TraitAbstractFn, TraitApplierSuperTag, TraitOwnAbstractFn, TraitOwnImplClassFn, TraitOwnImplInstanceFn, TraitSupertraitsFn } from "."
import { AbstractTag, Trait, TraitApplierSuperTag, TraitOwnAbstractFn, TraitOwnImplClassFn, TraitOwnImplInstanceFn, TraitSupertraitsFn } from "."
import { ExtendFn, ExtendableFn, SimplifyFn, StaticMembersFn } from "./util"
@@ -48,10 +48,10 @@ export class TraitExpression<
SubtraitImplWithAbstract extends Class<{}>,
>(
abstract: (
abstract: Pipe<Traits, [
Tuples.Map<TraitOwnAbstractFn>,
SimplifyFn,
]>
abstract: Call<
ComposeLeft<[TraitExpressionAbstractFn, SimplifyFn]>,
typeof this
>
) => Opaque<SubtraitAbstract, AbstractTag>,
// impl: ()
@@ -77,33 +77,15 @@ export interface TraitExpressionTraitsFn extends Fn {
}
export interface TraitExpressionAbstractFn extends Fn {
return: this["arg0"] extends TraitExpression<any, infer Traits>
? Pipe<Traits, [
TraitAbstractFn,
return: this["arg0"] extends TraitExpression<any, any>
? Pipe<this["arg0"], [
TraitExpressionTraitsFn,
Tuples.Map<TraitOwnAbstractFn>,
ExtendFn,
]>
: never
}
export interface TraitExpressionInstanceFn extends Fn {
return: this["arg0"] extends TraitExpression<infer Super, infer Traits>
? Pipe<Traits, [
TraitAbstractFn,
ExtendFn,
]>
: never
}
export interface TraitExpressionStaticFn extends Fn {
return: this["arg0"] extends TraitExpression<infer Super, infer Traits>
? Pipe<Traits, [
TraitAbstractFn,
ExtendFn,
]>
: never
}
export type Implements<Exp extends TraitExpression<any, any>> = (
Exp extends TraitExpression<any, infer Traits>
? Pipe<Traits, [