FeedMonad/FeedMonad/src/Data/Entry.hs

51 lines
1.1 KiB
Haskell

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TemplateHaskell #-}
module Data.Entry where
import Data.ByteString.Lazy (ByteString)
import Data.Set (Set)
import Data.Text (Text)
import Control.Lens
import Data.SafeCopy
import GHC.Generics (Generic)
import Data.URL (URL )
import Data.Time (UTCTime)
newtype Tag = Tag Text
deriving (Show, Eq, Ord, Generic)
instance SafeCopy Tag
data Entry = Entry
{ entryURL :: URL
, entryTitle :: Text
, entryContent :: ByteString
, entryScore :: Int
, entryTags :: Set Tag
, entryPublished :: UTCTime
}
deriving (Eq, Ord, Show)
-- * Lenses for accessing relevant parts of entry
content :: Lens' Entry ByteString
content = lens entryContent (\ en bs -> en{entryContent=bs})
title :: Lens' Entry Text
title = lens entryTitle (\ en txt -> en{entryTitle=txt})
url :: Lens' Entry URL
url = lens entryURL (\ en u -> en{entryURL = u})
score :: Lens' Entry Int
score = lens entryScore (\ en n -> en{entryScore=n})
tags :: Lens' Entry (Set Tag)
tags = lens entryTags (\ en txts -> en{entryTags=txts})
-- * TH generated instances
deriveSafeCopy 0 'base ''Entry