-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Explicitly handled object names
--
@package ObjectName
@version 1.1.0.0
-- | Object names are explicitly handled identifiers for API objects, e.g.
-- a texture object name in OpenGL or a buffer object name in OpenAL.
-- They come in two flavors: If a name can exist on its own without an
-- associated object, we have a GeneratableObjectName, otherwise
-- we have an ObjectName.
module Data.ObjectName
-- | An ObjectName is an explicitly handled identifier for API
-- objects, e.g. a texture object name in OpenGL or a buffer object name
-- in OpenAL.
class ObjectName a where deleteObjectName = deleteObjectNames . (: []) deleteObjectNames = mapM_ deleteObjectName
isObjectName :: (ObjectName a, MonadIO m) => a -> m Bool
deleteObjectName :: (ObjectName a, MonadIO m) => a -> m ()
deleteObjectNames :: (ObjectName a, MonadIO m) => [a] -> m ()
-- | A GeneratableObjectName is an ObjectName which can be
-- generated without creating an associated object at the same time, e.g.
-- an OpenGL buffer object name. Note that e.g. OpenGL program object
-- names do not fall into this category, because you can only create such
-- a name together with a program object itself.
class ObjectName a => GeneratableObjectName a where genObjectName = liftIO . fmap head . genObjectNames $ 1 genObjectNames = flip replicateM genObjectName
genObjectName :: (GeneratableObjectName a, MonadIO m) => m a
genObjectNames :: (GeneratableObjectName a, MonadIO m) => Int -> m [a]