38 lines
1.3 KiB
Haskell
38 lines
1.3 KiB
Haskell
{-# LANGUAGE TemplateHaskell #-}
|
|
|
|
module Network.IRC.Handlers.NickTracker.Types where
|
|
|
|
import ClassyPrelude
|
|
import Data.Data (Data)
|
|
import Data.IxSet (IxSet, Indexable (..), ixSet, ixFun)
|
|
import Data.SafeCopy (base, deriveSafeCopy)
|
|
|
|
newtype Nick = Nick Text deriving (Eq, Ord, Show, Data, Typeable, Hashable)
|
|
newtype CanonicalNick = CanonicalNick Text deriving (Eq, Ord, Show, Data, Typeable)
|
|
newtype LastSeenOn = LastSeenOn UTCTime deriving (Eq, Ord, Show, Data, Typeable)
|
|
|
|
data NickTrack = NickTrack {
|
|
nick :: !Nick,
|
|
canonicalNick :: !CanonicalNick,
|
|
lastSeenOn :: !LastSeenOn,
|
|
lastMessageOn :: !UTCTime,
|
|
lastMessage :: !Text
|
|
} deriving (Eq, Ord, Show, Data, Typeable)
|
|
|
|
instance Indexable NickTrack where
|
|
empty = ixSet [ ixFun $ (: []) . nick
|
|
, ixFun $ (: []) . canonicalNick
|
|
, ixFun $ (: []) . lastSeenOn ]
|
|
|
|
newtype NickTracking = NickTracking { nickTracking :: IxSet NickTrack }
|
|
deriving (Eq, Ord, Show, Data, Typeable)
|
|
|
|
$(deriveSafeCopy 0 'base ''Nick)
|
|
$(deriveSafeCopy 0 'base ''CanonicalNick)
|
|
$(deriveSafeCopy 0 'base ''LastSeenOn)
|
|
$(deriveSafeCopy 0 'base ''NickTrack)
|
|
$(deriveSafeCopy 0 'base ''NickTracking)
|
|
|
|
emptyNickTracking :: NickTracking
|
|
emptyNickTracking = NickTracking empty
|