introduce `instancetype`