pickName (NGDistribute ngis) = do
  let total = sum $ map snd ngis
  ri <- mgRandom
  let i = abs ri `mod` total
      findLoop i ((ng, n):ngis)
        | i < n     = ng
        | otherwise = findLoop (i - n) ngis
  pickName $ findLoop i ngis
pickName (NGDistribute ngis) = do
  let total = sum $ map snd ngis
  ri <- mgRandom
  let i = abs ri `mod` total
      findLoop i ((ng, n):ngis)
        | i < n     = ng
        | otherwise = findLoop (i - n) ngis
  pickName $ findLoop i ngis
pickName (NGDistribute ngis) = do
  let total = sum $ map snd ngis
  ri <- mgRandom
  let i = abs ri `mod` total
      findLoop i ((ng, n):ngis)
        | i < n     = ng
        | otherwise = findLoop (i - n) ngis
  pickName $ findLoop i ngis