uni-util-2.2.0.0: Util/Object.hs
{-# LANGUAGE ForeignFunctionInterface #-}
-- | Module which generates globally unique 'ObjectID's.
module Util.Object (
ObjectID(..),
Object(..),
newObject, -- generates a unique object
staticObject,
-- generates a not-necessarily unique object given a
-- postive integer. But at least it will be different from all those
-- generated by newObject, or with a different integer.
newInt -- generates a unique integer.
) where
-- --------------------------------------------------------------------------
-- Class Object
-- --------------------------------------------------------------------------
newtype ObjectID = ObjectID Int deriving (Eq,Ord)
class Object o where
objectID :: o -> ObjectID
instance Show ObjectID where
showsPrec d (ObjectID n) r = showsPrec d n r
instance Read ObjectID where
readsPrec p b =
case reads b of
[] -> []
((v,xs):_) ->[(ObjectID v,xs)]
-- --------------------------------------------------------------------------
-- New Object Identifier
-- --------------------------------------------------------------------------
foreign import ccall unsafe "new_object.h next_object_id" newInt :: IO Int
newObject :: IO ObjectID
newObject =
do
nextInt <- newInt
return(ObjectID nextInt)
staticObject :: Int -> ObjectID
staticObject i
| i>0 = ObjectID (-i)
| True = error "staticObject not given positive integer"