      unless should $ do
        liftIO GLFW.pollEvents >> locally action
        go

glfwMainLoopWithState :: GLFW.Window -> Program' () -> Program r ()
glfwMainLoopWithState = undefined

createGLFWVulkanInstance :: String -> Program r VkInstance
createGLFWVulkanInstance progName = do
    -- get required extension names from GLFW
    glfwReqExts <- liftIO GLFW.getRequiredInstanceExtensions
    createVulkanInstance