Generalizing 'jq' and Traversal Systems using optics and standard monads
Why do you need all this theory when you can use simple imperative languages?    for staff in company.staff:
      for pet in staff.pets:
        if pet.type == 'cat':
          print(pet.name + " belongs to " + staff.name)

I don't understand why functional languages are used at all.