trait MyTypeTrait(Stringable):
fn do_stuff(self):
...
@value
struct MyType(MyTypeTrait):
fn __str__(self) -> String:
return "MyType"
fn do_stuff(self):
pass
fn func2[*Ts: Stringable](args: VariadicPack[_, Stringable, *Ts]):
@parameter
for i in range(args.__len__()):
print(str(args[i]))
fn func1[*Ts: MyTypeTrait](args: VariadicPack[_, MyTypeTrait, *Ts]):
@parameter
for i in range(args.__len__()):
args[i].do_stuff()
func2(args)
fn func[*Ts: MyTypeTrait](*args: *Ts):
func1(args)
fn main():
func(MyType(), MyType())
trait MyTypeTrait(Stringable):
fn do_stuff(self):
...
@value
struct MyType(MyTypeTrait):
fn __str__(self) -> String:
return "MyType"
fn do_stuff(self):
pass
fn func2[*Ts: Stringable](args: VariadicPack[_, Stringable, *Ts]):
@parameter
for i in range(args.__len__()):
print(str(args[i]))
fn func1[*Ts: MyTypeTrait](args: VariadicPack[_, MyTypeTrait, *Ts]):
@parameter
for i in range(args.__len__()):
args[i].do_stuff()
func2(args)
fn func[*Ts: MyTypeTrait](*args: *Ts):
func1(args)
fn main():
func(MyType(), MyType())