    -- | 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
    -> Color -> (Float -> IO Picture) -> (Controller -> IO ()) -> IO ()
    animateIO display :: Display
    display backColor :: Color
    backColor
            frameFunIO :: Float -> IO Picture
    frameFunIO eatControllerIO :: Controller -> IO ()
    eatControllerIO
            = GLUTState
    -> Bool
    -> Display
    -> Color
    -> (Float -> IO Picture)
    -> (Controller -> IO ())
    -> IO ()
    forall a.
    Backend a =>
    a
    -> Bool
    -> Display
    -> Color
    -> (Float -> IO Picture)
    -> (Controller -> IO ())
    -> IO ()
    animateWithBackendIO
                    GLUTState
    defaultBackendState
                    Bool
    True              -- pannable
                    Display
    display Color
    backColor
                    Float -> IO Picture
    frameFunIO
                    Controller -> IO ()
    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
    -> Color -> (Float -> IO Picture) -> (Controller -> IO ()) -> IO ()
    animateFixedIO display :: Display
    display backColor :: Color
    backColor
            frameFunIO :: Float -> IO Picture
    frameFunIO eatControllerIO :: Controller -> IO ()
    eatControllerIO
            = GLUTState
    -> Bool
    -> Display
    -> Color
    -> (Float -> IO Picture)
    -> (Controller -> IO ())
    -> IO ()
    forall a.
    Backend a =>
    a
    -> Bool
    -> Display
    -> Color
    -> (Float -> IO Picture)
    -> (Controller -> IO ())
    -> IO ()
    animateWithBackendIO
                    GLUTState
    defaultBackendState
                    Bool
    False
                    Display
    display Color
    backColor
                    Float -> IO Picture
    frameFunIO
                    Controller -> IO ()
    eatControllerIO