    -- | Display mode is for drawing a static picture.
    module Graphics.Gloss.Interface.IO.Interact
            ( module Graphics.Gloss.Data.Display
            , module Graphics.Gloss.Data.Picture
            , module Graphics.Gloss.Data.Color
            , interactIO
            , Controller    (..)
            , Event(..), Key(..), SpecialKey(..), MouseButton(..), KeyState(..), Modifiers(..))
    where
    import Graphics.Gloss.Data.Display
    import Graphics.Gloss.Data.Controller
    import Graphics.Gloss.Data.Picture
    import Graphics.Gloss.Data.Color
    import Graphics.Gloss.Internals.Interface.Event
    import Graphics.Gloss.Internals.Interface.Interact
    import Graphics.Gloss.Internals.Interface.Backend

    -- | Open a new window and interact with an infrequently updated picture.
    --
    --   Similar to `displayIO`, except that you manage your own events.
    --
    interactIO
            :: Display                      -- ^ Display mode.
            -> Color                        -- ^ Background color.
            -> world                        -- ^ Initial world state.
            -> (world -> IO Picture)        -- ^ A function to produce the current picture.
            -> (Event -> world -> IO world) -- ^ A function to handle input events.
            -> (Controller -> IO ())        -- ^ Callback to take the display controller.
            -> IO ()

    interactIO :: forall world.
    Display
    -> Color
    -> world
    -> (world -> IO Picture)
    -> (Event -> world -> IO world)
    -> (Controller -> IO ())
    -> IO ()
    interactIO Display
    dis Color
    backColor world
    worldInit world -> IO Picture
    makePicture Event -> world -> IO world
    handleEvent Controller -> IO ()
    eatController
     =      GLUTState
    -> Display
    -> Color
    -> world
    -> (world -> IO Picture)
    -> (Event -> world -> IO world)
    -> (Controller -> IO ())
    -> IO ()
    forall a world.
    Backend a =>
    a
    -> Display
    -> Color
    -> world
    -> (world -> IO Picture)
    -> (Event -> world -> IO world)
    -> (Controller -> IO ())
    -> IO ()
    interactWithBackend
                    GLUTState
    defaultBackendState
                    Display
    dis
                    Color
    backColor
                    world
    worldInit
                    world -> IO Picture
    makePicture
                    Event -> world -> IO world
    handleEvent
                    Controller -> IO ()
    eatController