-- |
-- Module: Web.WikiCFP.Scraper.Type
-- Description: data types for WikiCFP scraper
-- Maintainer: Toshio Ito <debug.ito@gmail.com>
--
-- 
module Web.WikiCFP.Scraper.Type
       ( When(..),
         Event(..),
       ) where

import Data.Text (Text)
import Data.Time (Day)

-- | Period of dates (inclusive).
data When = When { When -> Day
whenFrom :: !Day,
                   When -> Day
whenTo :: !Day
                 } deriving (When -> When -> Bool
(When -> When -> Bool) -> (When -> When -> Bool) -> Eq When
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: When -> When -> Bool
$c/= :: When -> When -> Bool
== :: When -> When -> Bool
$c== :: When -> When -> Bool
Eq,Eq When
Eq When
-> (When -> When -> Ordering)
-> (When -> When -> Bool)
-> (When -> When -> Bool)
-> (When -> When -> Bool)
-> (When -> When -> Bool)
-> (When -> When -> When)
-> (When -> When -> When)
-> Ord When
When -> When -> Bool
When -> When -> Ordering
When -> When -> When
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: When -> When -> When
$cmin :: When -> When -> When
max :: When -> When -> When
$cmax :: When -> When -> When
>= :: When -> When -> Bool
$c>= :: When -> When -> Bool
> :: When -> When -> Bool
$c> :: When -> When -> Bool
<= :: When -> When -> Bool
$c<= :: When -> When -> Bool
< :: When -> When -> Bool
$c< :: When -> When -> Bool
compare :: When -> When -> Ordering
$ccompare :: When -> When -> Ordering
$cp1Ord :: Eq When
Ord,Int -> When -> ShowS
[When] -> ShowS
When -> String
(Int -> When -> ShowS)
-> (When -> String) -> ([When] -> ShowS) -> Show When
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [When] -> ShowS
$cshowList :: [When] -> ShowS
show :: When -> String
$cshow :: When -> String
showsPrec :: Int -> When -> ShowS
$cshowsPrec :: Int -> When -> ShowS
Show)

-- | A conference event posted to WikiCFP site. It corresponds to a
-- row in the table you see conference pages etc, for example,
-- <http://wikicfp.com/cfp/program?id=1172>
data Event = Event { Event -> Text
eventShortName :: !Text,
                     
                     Event -> Text
eventURL :: !Text,
                     -- ^ URL to the WikiCFP page of this event.
                     
                     Event -> Text
eventLongName :: !Text, 
                     Event -> Maybe When
eventWhen :: !(Maybe When),
                     Event -> Maybe Text
eventWhere :: !(Maybe Text),
                     
                     Event -> [Day]
eventDeadlines :: ![Day]
                     -- ^ deadlines are in an ascending order, i.e.,
                     -- the earliest deadline is the head.
                     
                   } deriving (Event -> Event -> Bool
(Event -> Event -> Bool) -> (Event -> Event -> Bool) -> Eq Event
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Event -> Event -> Bool
$c/= :: Event -> Event -> Bool
== :: Event -> Event -> Bool
$c== :: Event -> Event -> Bool
Eq,Eq Event
Eq Event
-> (Event -> Event -> Ordering)
-> (Event -> Event -> Bool)
-> (Event -> Event -> Bool)
-> (Event -> Event -> Bool)
-> (Event -> Event -> Bool)
-> (Event -> Event -> Event)
-> (Event -> Event -> Event)
-> Ord Event
Event -> Event -> Bool
Event -> Event -> Ordering
Event -> Event -> Event
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Event -> Event -> Event
$cmin :: Event -> Event -> Event
max :: Event -> Event -> Event
$cmax :: Event -> Event -> Event
>= :: Event -> Event -> Bool
$c>= :: Event -> Event -> Bool
> :: Event -> Event -> Bool
$c> :: Event -> Event -> Bool
<= :: Event -> Event -> Bool
$c<= :: Event -> Event -> Bool
< :: Event -> Event -> Bool
$c< :: Event -> Event -> Bool
compare :: Event -> Event -> Ordering
$ccompare :: Event -> Event -> Ordering
$cp1Ord :: Eq Event
Ord,Int -> Event -> ShowS
[Event] -> ShowS
Event -> String
(Int -> Event -> ShowS)
-> (Event -> String) -> ([Event] -> ShowS) -> Show Event
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Event] -> ShowS
$cshowList :: [Event] -> ShowS
show :: Event -> String
$cshow :: Event -> String
showsPrec :: Int -> Event -> ShowS
$cshowsPrec :: Int -> Event -> ShowS
Show)