diff options
Diffstat (limited to 'src/Data/Paper.hs')
| -rw-r--r-- | src/Data/Paper.hs | 40 |
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 |
