// 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
}
