eta reduction
uninline map-and-filter
don't mix side effects with recursion
use cl-lib, silences compilation warnings
abstract accesses to i3 parsed json objects
use lexical-binding