hask-irc/hask-irc-core/Network/IRC/Handlers/NickTracker/Types.hs

38 lines
1.3 KiB
Haskell
Raw Normal View History

2014-05-23 02:45:45 +05:30
{-# LANGUAGE TemplateHaskell #-}
module Network.IRC.Handlers.NickTracker.Types where
import ClassyPrelude
2014-05-25 01:09:31 +05:30
import Data.Data (Data)
import Data.IxSet (IxSet, Indexable (..), ixSet, ixFun)
import Data.SafeCopy (base, deriveSafeCopy)
2014-05-23 02:45:45 +05:30
2014-05-25 14:51:33 +05:30
newtype Nick = Nick Text deriving (Eq, Ord, Show, Data, Typeable, Hashable)
2014-05-23 02:45:45 +05:30
newtype CanonicalNick = CanonicalNick Text deriving (Eq, Ord, Show, Data, Typeable)
2014-05-25 01:09:31 +05:30
newtype LastSeenOn = LastSeenOn UTCTime deriving (Eq, Ord, Show, Data, Typeable)
2014-05-23 02:45:45 +05:30
data NickTrack = NickTrack {
2014-05-24 23:49:52 +05:30
nick :: !Nick,
canonicalNick :: !CanonicalNick,
lastSeenOn :: !LastSeenOn,
lastMessageOn :: !UTCTime,
lastMessage :: !Text
2014-05-23 02:45:45 +05:30
} deriving (Eq, Ord, Show, Data, Typeable)
instance Indexable NickTrack where
empty = ixSet [ ixFun $ (: []) . nick
, ixFun $ (: []) . canonicalNick
, ixFun $ (: []) . lastSeenOn ]
2014-05-25 01:09:31 +05:30
newtype NickTracking = NickTracking { nickTracking :: IxSet NickTrack }
deriving (Eq, Ord, Show, Data, Typeable)
2014-05-23 02:45:45 +05:30
$(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