don't need explicit type witness