Also, this might have been pointed out but anyway:

  (generation->maybe obj)
  (generation->either obj)

  If obj is an end-of-file object, return Nothing / a Left of objs. Otherwise, return obj wrapped in a Just.

should be:

  (generation->maybe obj)
  (generation->either obj objs ...)

  If obj is an end-of-file object, return Nothing / a Left of objs. Otherwise, return obj wrapped in a Just / Right.