struct MyPlugin {
}

fn (p MyPlugin) on_update() {
	println('[MyPlugin.on_update]')
}

fn foo[T](my_plugin T) {
	println('[foo]')
	println(T.name) // MyPlugin
	println(typeof(my_plugin).name) // MyPlugin

	fn [my_plugin] () {
		my_plugin.on_update()
	}()
}

fn main() {
	foo[MyPlugin](MyPlugin{})
}
