iterateWithMVar :: AppVar a
                -> IO ()
iterateWithMVar mvar = iterate'
    where iterate' = do app <- readMVar mvar
                        unless (app^.userApp.shouldQuit $ app^.userApp.userData) $
                            do stepApp mvar
                               iterate'
iterateWithMVar :: AppVar a
                -> IO ()
iterateWithMVar mvar = iterate'
    where iterate' = do app <- readMVar mvar
                        unless (app^.userApp.shouldQuit $ app^.userApp.userData) $
                            do stepApp mvar
                               iterate'
iterateWithMVar mvar = iterate'
    where iterate' = do app <- readMVar mvar
                        unless (app^.userApp.shouldQuit $ app^.userApp.userData) $
                            do stepApp mvar
                               iterate'