How to shuffle a TArray?

Sorry for necroposting, I’ve tried this implementation and it works but I don’t quite understand what’s going on behind the scenes, why the function that takes a predicate can take extra parameters?