gameInfo header =
        consumeFreeformGameInfo header
    >>= consumeUpdateGameInfo      rank   (\g v -> g { T.rankBlack = v }) "BR" header
    >>= consumeUpdateGameInfo      rank   (\g v -> g { T.rankWhite = v }) "WR" header
    >>= consumeUpdateGameInfo      round  (\g v -> g { T.round     = v }) "RO" header
    >>= consumeUpdateGameInfoMaybe result (\g v -> g { T.result    = v }) "RE" header
    >>= consumeUpdateGameInfoMaybe date   dateUpdate                      "DT" header
    >>= warnClipDate
    >>= timeLimit
gameInfo header =
        consumeFreeformGameInfo header
    >>= consumeUpdateGameInfo      rank   (\g v -> g { T.rankBlack = v }) "BR" header
    >>= consumeUpdateGameInfo      rank   (\g v -> g { T.rankWhite = v }) "WR" header
    >>= consumeUpdateGameInfo      round  (\g v -> g { T.round     = v }) "RO" header
    >>= consumeUpdateGameInfoMaybe result (\g v -> g { T.result    = v }) "RE" header
    >>= consumeUpdateGameInfoMaybe date   dateUpdate                      "DT" header
    >>= warnClipDate
    >>= timeLimit
gameInfo header =
        consumeFreeformGameInfo header
    >>= consumeUpdateGameInfo      rank   (\g v -> g { T.rankBlack = v }) "BR" header
    >>= consumeUpdateGameInfo      rank   (\g v -> g { T.rankWhite = v }) "WR" header
    >>= consumeUpdateGameInfo      round  (\g v -> g { T.round     = v }) "RO" header
    >>= consumeUpdateGameInfoMaybe result (\g v -> g { T.result    = v }) "RE" header
    >>= consumeUpdateGameInfoMaybe date   dateUpdate                      "DT" header
    >>= warnClipDate
    >>= timeLimit