Why is the 1st argument of reduce ProcCallable?
reduce's first argument function is `Callable` abstract class in Python.
Here it's currently ProcCallable, meaning we only accept proc type as this Callable, because:
- in Nim unless {.experimental: "callOperator".} is enabled, only proc is callable.
- I've tried to declare Callable[T: openArray[typedesc], R] = concept ... but it just cannot matched proc
Why not simply write as proc (a1: T, a2: R): R?
- it's too long
- this library is aimed to be look like Python's functools, and ProcCallable [[R, T], R] is the most similar with Callable[[R, T], R]