// callback types type CBnoret[T] = fn (val T) type CBnoret2[T] = fn (val T, prev T) type CBvret[T] = fn (val T) T type CBvret2[T] = fn (val T, prev T) T type Callback[T] = CBnoret[T] | CBnoret2[T] | CBvret[T] | CBvret2[T] interface IObv[T] { v T prev T cb []Callback[T] } struct Test[T] { a T } struct Obv[T] { mut: v T prev T cb []Callback // sumtype cb2 []CBvret2 // alias cb3 []Test // struct }