drawInWindow :: forall a. (RenderOperation -> IO a) -> IO ()
drawInWindow drawFunc = inWindow $ \window -> do
    screenSurface <- SDL.getWindowSurface window
    _ <- drawFunc $ drawOn window screenSurface
    _ <- SDL.freeSurface screenSurface
    return ()
drawInWindow :: forall a. (RenderOperation -> IO a) -> IO ()
drawInWindow drawFunc = inWindow $ \window -> do
    screenSurface <- SDL.getWindowSurface window
    _ <- drawFunc $ drawOn window screenSurface
    _ <- SDL.freeSurface screenSurface
    return ()
drawInWindow drawFunc = inWindow $ \window -> do
    screenSurface <- SDL.getWindowSurface window
    _ <- drawFunc $ drawOn window screenSurface
    _ <- SDL.freeSurface screenSurface
    return ()