We can use internal `fail` method instead of `throw new Illeagal...`