step2 :: Map Point Seat -> Map Point Seat
step2 l = M.mapWithKey (rule 5 see) l
 where
  see xy = mapMaybe ((l M.!?) <=< from xy) neighbors
  from xy n = find (`M.member` l) . takeWhile aSeat . U.tail $ iterate (+ n) xy
  aSeat = inRange (V2 0 0, V2 maxX maxY)
  maxX  = maximum . fmap (^. _x) $ M.keys l
  maxY  = maximum . fmap (^. _y) $ M.keys l
step2 :: Map Point Seat -> Map Point Seat
step2 l = M.mapWithKey (rule 5 see) l
 where
  see xy = mapMaybe ((l M.!?) <=< from xy) neighbors
  from xy n = find (`M.member` l) . takeWhile aSeat . U.tail $ iterate (+ n) xy
  aSeat = inRange (V2 0 0, V2 maxX maxY)
  maxX  = maximum . fmap (^. _x) $ M.keys l
  maxY  = maximum . fmap (^. _y) $ M.keys l
step2 l = M.mapWithKey (rule 5 see) l
 where
  see xy = mapMaybe ((l M.!?) <=< from xy) neighbors
  from xy n = find (`M.member` l) . takeWhile aSeat . U.tail $ iterate (+ n) xy
  aSeat = inRange (V2 0 0, V2 maxX maxY)
  maxX  = maximum . fmap (^. _x) $ M.keys l
  maxY  = maximum . fmap (^. _y) $ M.keys l