fix read, which wasn't accounting for maybes in recursive calls