I'm not sure how useful it would be for `public` consumption, but internally I rather like it. I'd probably switch the parameter to `Repository` to simplify usage. And maybe defer the input validation until we've decided we need it (sup microoptimization)?