Look familiar?
Because in Ramda every function is curried, it makes sense to think of every argument returning a new function.
The simplest way to express that in es6 is to use arrow functions.
So when you see a → substitute it for a `=>`
Anything wrapped in `()` is a function that will be received as an argument. And the names, and types with in those parens define the type that visitor function should adhere to.
So ` (acc, y)` is saying the visitor function should accept two arguments: `acc` and `y`.
In our usage code we follow this convention: