----------------------------------------------------------------------------- -- | -- Module : Entry -- Copyright : (C) Peter Robinson 2010-2012 -- License : GPL-2 -- -- Maintainer : Peter Robinson -- Stability : experimental -- Portability : portable -- ----------------------------------------------------------------------------- module Entry where import Data.Maybe import Data.List(intercalate) import Data.Text.Lazy(Text) import qualified Data.Text.Lazy as T data Entry = Entry { entryName :: Text , entryGraduationInfo :: Maybe GraduationInfo , entryAdvisors :: [(Text,Text)] } deriving(Ord,Eq) urlAdvisors :: Entry -> [Text] urlAdvisors = map (T.pack . (++) "http://genealogy.math.ndsu.nodak.edu/" . T.unpack . snd) . entryAdvisors data GraduationInfo = GraduationInfo { gradDegree :: Maybe Text , gradUniversity :: Maybe Text , gradYear :: Maybe Text , gradThesis :: Maybe Text } deriving(Ord,Eq) instance Show Entry where show e = T.unpack (entryName e) ++ maybeShow (entryGraduationInfo e) where maybeShow (Just g) = "\\n" ++ show g maybeShow Nothing = "" instance Show GraduationInfo where show g = let ls = map T.unpack $ catMaybes [gradDegree g, gradUniversity g, gradYear g] in intercalate ", " ls ++ "\\n" ++ maybeShow (gradThesis g) where maybeShow (Just gi) = T.unpack gi maybeShow Nothing = "" removeThesis :: Entry -> Entry removeThesis e = e{ entryGraduationInfo = case entryGraduationInfo e of Nothing -> Nothing Just g -> Just g{gradThesis = Nothing}}