Is there any reason not to trust the user if they pass in a `func`? So just check that `func` is not None?