module WeekDaze.StudentView.LessonResourceIds(
LessonResourceIds(..)
) where
import Control.Arrow((&&&))
import qualified Control.DeepSeq
import qualified Text.XHtml.Strict
import qualified Text.XML.HXT.Arrow.Pickle as HXT
import qualified WeekDaze.Model.ResourceUser as Model.ResourceUser
import Text.XHtml.Strict((+++), (<<))
tag :: String
tag = "studentViewLessonResourceIds"
data LessonResourceIds locationId teacherId = MkLessonResourceIds {
getLocationId :: locationId,
getTeacherId :: teacherId
} deriving (Eq, Ord, Show)
instance (
Text.XHtml.Strict.HTML locationId,
Text.XHtml.Strict.HTML teacherId
) => Text.XHtml.Strict.HTML (LessonResourceIds locationId teacherId) where
toHtml = (
\(locationId, teacherId) -> Text.XHtml.Strict.li << (locationId +++ '.') +++ Text.XHtml.Strict.li << (teacherId +++ '.')
) . (
getLocationId &&& getTeacherId
)
instance (HXT.XmlPickler locationId, HXT.XmlPickler teacherId) => HXT.XmlPickler (LessonResourceIds locationId teacherId) where
xpickle = HXT.xpElem tag $ HXT.xpWrap (
uncurry MkLessonResourceIds,
getLocationId &&& getTeacherId
) HXT.xpickle
instance (Eq locationId, Eq teacherId) => Model.ResourceUser.ResourceUser (LessonResourceIds locationId teacherId) where
areIndependent l r = getLocationId l /= getLocationId r && getTeacherId l /= getTeacherId r
instance (Control.DeepSeq.NFData locationId, Control.DeepSeq.NFData teacherId) => Control.DeepSeq.NFData (LessonResourceIds locationId teacherId) where
rnf = Control.DeepSeq.rnf . (getLocationId &&& getTeacherId)