make a nicer variant type dispatcher