change promotable to a func