    -- | Animate a picture in a window.
    module Graphics.Gloss.Interface.IO.Animate
            ( module Graphics.Gloss.Data.Display
            , module Graphics.Gloss.Data.Picture
            , module Graphics.Gloss.Data.Color
            , animateIO
            , animateFixedIO
            , Controller (..))
    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.Animate
    import Graphics.Gloss.Internals.Interface.Backend

    -- | Open a new window and display the given animation.
    --
    --   Once the window is open you can use the same commands as with @display@.
    --
    animateIO
            :: Display                -- ^ Display mode.
            -> Color                  -- ^ Background color.
            -> (Float -> IO Picture)  -- ^ Function to produce the next frame of animation.
                                      --      It is passed the time in seconds since the program started.
            -> (Controller -> IO ())  -- ^ Callback to take the display controller.
            -> IO ()

    animateIO display backColor
            frameFunIO eatControllerIO
            = animateWithBackendIO
                    defaultBackendState
                    True              -- pannable
                    display backColor
                    frameFunIO
                    eatControllerIO

    -- | Like `animateIO` but don't allow the display to be panned around.
    --
    animateFixedIO
            :: Display                -- ^ Display mode.
            -> Color                  -- ^ Background color.
            -> (Float -> IO Picture)  -- ^ Function to produce the next frame of animation.
                                      --      It is passed the time in seconds since the program started.
            -> (Controller -> IO ())  -- ^ Callback to take the display controller.
            -> IO ()

    animateFixedIO display backColor
            frameFunIO eatControllerIO
            = animateWithBackendIO
                    defaultBackendState
                    False
                    display backColor
                    frameFunIO
                    eatControllerIO