using Closure are type hint instead of callbacks, and using __invoke to call the Closures again