Self-invoke fn so reverse is only called once