Implementing a walker

It's easier to reason with, esp. when passing/recieving arguments
like depth as an int. Rationale; rhis doesn't really fit in with
monads, so lets extract it to become a walker!