1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
module Data.Paper
( Paper (..)
, ArXiv (..)
, DOI (..)
) where
import Data.Name
data Paper a = Paper
{ date :: !Day
, authors :: ![Name a]
, title :: !a
, doi :: !(Maybe (DOI a))
, arXiv :: !(Maybe (ArXiv a))
, pubStatus :: !(PubStatus a)
, abstract :: !a
}
data ArXiv a = ArXiv
{ arxivDate :: !Day
, arxivID :: !a
, arxivClasses :: !(NonEmpty (ArXivClass a))
} deriving (Eq, Foldable, Functor, Generic, Ord, Show, Traversable)
data ArXivClass a = ArXiv
{ archive :: !a
, subjectClass :: !a
} deriving (Eq, Foldable, Functor, Generic, Ord, Show, Traversable)
newtype DOI a = DOI a
deriving stock (Eq, Foldable, Functor, Generic, Ord, Show, Traversable)
data PubStatus a
= Submitted
{ journal :: !a
}
| Accepted
{ journal :: !a
}
| Published
{ journal :: !a
, volume :: !(Maybe a)
, number :: !(Maybe a)
, pages :: !(Maybe a)
}
| UnPublished
deriving (Eq, Foldable, Functor, Generic, Ord, Show, Traversable)
|