diff options
| author | Chris Wells <chris@mathematicaster.org> | 2025-02-10 12:48:38 -0600 |
|---|---|---|
| committer | Chris Wells <chris@mathematicaster.org> | 2025-02-10 12:48:38 -0600 |
| commit | 0c677070edf9978cb85a0b521f7e6e0ef6d6b491 (patch) | |
| tree | 1bf0a024ea2c1ccc9c21c68b916e76017bafd310 /src/Data/Paper.hs | |
| parent | 75ac829ee7d661d758f7828e609e28ee4e05d038 (diff) | |
| download | main-0c677070edf9978cb85a0b521f7e6e0ef6d6b491.tar main-0c677070edf9978cb85a0b521f7e6e0ef6d6b491.tar.gz main-0c677070edf9978cb85a0b521f7e6e0ef6d6b491.tar.bz2 main-0c677070edf9978cb85a0b521f7e6e0ef6d6b491.tar.lz main-0c677070edf9978cb85a0b521f7e6e0ef6d6b491.tar.xz main-0c677070edf9978cb85a0b521f7e6e0ef6d6b491.tar.zst main-0c677070edf9978cb85a0b521f7e6e0ef6d6b491.zip | |
A lot of work on aliases and the like
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 |
