diff options
Diffstat (limited to 'src/Data/Paper.hs')
| -rw-r--r-- | src/Data/Paper.hs | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/Data/Paper.hs b/src/Data/Paper.hs new file mode 100644 index 0000000..c2d4b3e --- /dev/null +++ b/src/Data/Paper.hs @@ -0,0 +1,69 @@ +{-# LANGUAGE QuasiQuotes #-} +module Data.Paper + ( Paper (..) + , Status (..) + ) where + +import Prolog +import Data.Journal +import Data.Person +import Data.Time +import Network.URI +import Network.URI.Static + + +data Paper a = Paper + { title :: !a + , authors :: ![Name a] + , status :: !(Status a) + } deriving (Eq, Generic, Ord, Show) + +-- instance (Binary a, Binary (Status f a), Binary (f (Person a))) => Binary (Paper f a) + +data Status a + = Submitted + | Accepted + { journal :: !a + } + | Published + { date :: !Day + , journal :: !a + , doi :: !DOI + } + | Unpublished + deriving (Eq, Generic, Ord, Show) + +-- instance (Binary a, Binary (f (Journal a))) => Binary (Status f a) + +newtype DOI = DOI URI + deriving (Eq, Generic, Ord, Show) + deriving newtype Binary + +data ArXiv a = ArXiv + { _identifier :: !URI + , _class :: !a + } deriving (Eq, Foldable, Functor, Generic, Ord, Show, Traversable) + +instance Binary a => Binary (ArXiv a) + +arXivURI :: URI +arXivURI = [uri|https://arxiv.org/|] + +data ArXivType = ArXivAbs | ArXivPdf | ArXivSrc + deriving (Bounded, Enum, Eq, Generic, Ord, Show) + +arXivTypeRelative :: ArXivType -> URI +arXivTypeRelative = \case + ArXivAbs -> [relativeReference|/abs|] + ArXivPdf -> [relativeReference|/pdf|] + ArXivSrc -> [relativeReference|/src|] + +arXivLink :: ArXivType -> ArXiv a -> URI +arXivLink at a = _identifier a `relativeTo` arXivTypeRelative at `relativeTo` arXivURI + + +doiURI :: URI +doiURI = [uri|https://doi.org/|] + +doiLink :: DOI -> URI +doiLink (DOI u) = u `relativeTo` doiURI |
