input :: IO (Map Point Seat)
input = do
  raw <- fmap toString . lines <$> readFileText "input.txt"
  pure $ fromList
    [ (V2 x y, s)
    | (x, line) <- zip [0 ..] raw
    , (y, c   ) <- zip [0 ..] line
    , s         <- [ Empty | c == 'L' ]
    ]
input :: IO (Map Point Seat)
input = do
  raw <- fmap toString . lines <$> readFileText "input.txt"
  pure $ fromList
    [ (V2 x y, s)
    | (x, line) <- zip [0 ..] raw
    , (y, c   ) <- zip [0 ..] line
    , s         <- [ Empty | c == 'L' ]
    ]
input = do
  raw <- fmap toString . lines <$> readFileText "input.txt"
  pure $ fromList
    [ (V2 x y, s)
    | (x, line) <- zip [0 ..] raw
    , (y, c   ) <- zip [0 ..] line
    , s         <- [ Empty | c == 'L' ]
    ]