summaryrefslogtreecommitdiff
path: root/src/Data
diff options
context:
space:
mode:
Diffstat (limited to 'src/Data')
-rw-r--r--src/Data/Paper.hs40
1 files changed, 26 insertions, 14 deletions
diff --git a/src/Data/Paper.hs b/src/Data/Paper.hs
index f8b691d..34c6fad 100644
--- a/src/Data/Paper.hs
+++ b/src/Data/Paper.hs
@@ -27,7 +27,7 @@ data Paper a = Paper
, authors :: ![Name a]
, abstract :: !(Maybe a)
, extraLink :: !(Maybe URI)
- , eprint :: !(Maybe (Eprint a))
+ , eprints :: ![Eprint a]
} deriving (Eq, Foldable, Functor, Ord, Generic, Show, Traversable)
instance Binary a => Binary (Paper a)
@@ -102,26 +102,38 @@ mkPaper bib = do
-- extraLink = M.lookup "extralink" fields
title <- find' "title"
authors <- find' "authors" >>= traverse (ffmap toSL . parseName . toSL) . B.splitAuthorList
- status <- toLower <<$>> find' "pubstate" >>= \case
- "submitted" -> Submitted <$> getDate
- "unpublished" -> Unpublished <$> getDate
- "accepted" -> Accepted <$> getDate <*> find' "journal"
- _ -> do
- journal <- find' "journal"
- doi <- find' "doi" >>= fmap DOI . puri
- date <- getDate
- pure $ Published {..}
+ status <- do
+ date <- getDate
+ traverse puri (M.lookup "doi" fields) >>= \case
+ Just u -> do
+ let doi = DOI u
+ journal <- findit "journal"
+ pure $ Published {..}
+ Nothing -> pure $ case M.lookup "journal" fields of
+ Just journal -> Accepted {..}
+ Nothing -> case toLower <<$>> M.lookup "pubstate" fields of
+ Just "unpublished" -> Unpublished {..}
+ _ -> Submitted {..}
+ -- case toLower <<$>> M.lookup "pubstate" of
+ -- Just "submitted" -> Submitted <$> getDate
+ -- Just "unpublished" -> Unpublished <$> getDate
+ -- Just "accepted" -> Accepted <$> getDate <*> find' "journal"
+ -- _ -> do
+ -- journal <- find' "journal"
+ -- doi <- find' "doi" >>= fmap DOI . puri
+ -- date <- getDate
+ -- pure $ Published {..}
extraLink <- traverse puri $ M.lookup "extralink" fields
- eprint <- case toLower <$> M.lookup "eprinttype" fields of
+ eprint <- case toLower <<$>> M.lookup "eprinttype" fields of
Just "arxiv" -> do
_identifier <- find' "eprint" >>= puri
_class <- find' "eprintclass"
- pure $ Just $ ArXivEprint $ ArXiv {..}
+ pure $ pure $ ArXivEprint $ ArXiv {..}
Just s -> do
let eprintName = s
eprintLink <- find' "eprint" >>= puri
- pure $ Just $ OtherEprint {..}
- Nothing -> pure Nothing
+ pure $ pure $ OtherEprint {..}
+ Nothing -> pure []
pure $ Paper {..}
where
fields = M.fromList $ B.fields bib