{-# LANGUAGE CPP, MultiParamTypeClasses #-}
module WeekDaze.Identifiers.TimeslotId(
TimeslotId(),
mkTimeslotId
) where
import qualified Control.Arrow
import qualified Control.DeepSeq
import qualified Data.Array.IArray
import qualified Text.XHtml.Strict
import Text.XHtml.Strict((<<))
import qualified Text.XML.HXT.Arrow.Pickle as HXT
import qualified WeekDaze.Text.XHTML as Text.XHTML
#ifdef USE_HDBC
import qualified Data.Convertible
import qualified Database.HDBC
instance Data.Convertible.Convertible Database.HDBC.SqlValue TimeslotId where
safeConvert = fmap mkTimeslotId . Data.Convertible.safeConvert
#endif /* USE_HDBC */
tag :: String
tag = "timeslotId"
newtype TimeslotId = MkTimeslotId {
deconstruct :: Int
} deriving (Data.Array.IArray.Ix, Eq, Ord)
mkTimeslotId :: Int -> TimeslotId
mkTimeslotId = MkTimeslotId
instance Show TimeslotId where
showsPrec _ = shows . deconstruct
instance Read TimeslotId where
readsPrec _ = map (Control.Arrow.first mkTimeslotId) . reads
instance Enum TimeslotId where
toEnum = mkTimeslotId
fromEnum = deconstruct
instance HXT.XmlPickler TimeslotId where
xpickle = HXT.xpWrap (
mkTimeslotId,
deconstruct
) $ HXT.xpAttr tag HXT.xpInt
instance Control.DeepSeq.NFData TimeslotId where
rnf = Control.DeepSeq.rnf . deconstruct
instance Text.XHtml.Strict.HTML TimeslotId where
toHtml (MkTimeslotId i) = Text.XHTML.mkXHTMLSpan tag << i