don't use associated type due to ICE