    -- #hide
    --------------------------------------------------------------------------------
    -- |
    -- Module      :  Graphics.UI.GLUT.QueryUtils
    -- Copyright   :  (c) Sven Panne 2002-2005
    -- License     :  BSD-style (see the file libraries/GLUT/LICENSE)
    --
    -- Maintainer  :  sven.panne@aedion.de
    -- Stability   :  stable
    -- Portability :  portable
    --
    -- This is a purely internal module with utilities to query GLUT state.
    --
    --------------------------------------------------------------------------------

    module Graphics.UI.GLUT.QueryUtils (
      Getter, simpleGet, layerGet, deviceGet
    ) where

    import Foreign.C.Types
    import Graphics.Rendering.OpenGL ( GLenum )
    import Graphics.UI.GLUT.Raw

    --------------------------------------------------------------------------------

    type PrimGetter =                GLenum -> IO CInt
    type Getter a   = (CInt -> a) -> GLenum -> IO a

    makeGetter :: PrimGetter -> Getter a
    makeGetter g f = fmap f . g

    simpleGet, layerGet, deviceGet :: Getter a
    simpleGet = makeGetter glutGet
    layerGet  = makeGetter glutLayerGet
    deviceGet = makeGetter glutDeviceGet