    module Graphics.Gloss.Data.Controller
            ( Controller    (..))
    where
    import Graphics.Gloss.Data.ViewPort

    -- | Functions to asynchronously control a `Gloss` display.
    data Controller
            = Controller
            { -- | Indicate that we want the picture to be redrawn.
              controllerSetRedraw       :: IO ()

              -- | Modify the current viewport, also indicating that it should be redrawn.
            , controllerModifyViewPort  :: (ViewPort -> IO ViewPort) -> IO () }