aip-0.0.1: src/Data/Aviation/Aip/AipHref.hs
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE FlexibleInstances #-}
module Data.Aviation.Aip.AipHref(
AipHref(..)
, parseAipHref
, uriAipHref
, HasAipHref(..)
) where
import Data.Aviation.Aip.AipDate(AipDate, HasAipDate(aipDate), parseAipDate)
import Data.Aviation.Aip.AipPg(AipPg, HasAipPg(aipPg), parseAipPg, aippg1, aippg2)
import Data.Aviation.Aip.Day(HasDay(day, day1, day2))
import Data.Aviation.Aip.Month(HasMonth(month))
import Data.Aviation.Aip.Year(HasYear(year, year1, year2, year3, year4))
import Data.Digit(Digit, HasDigit(hasdigit), parsedigit)
import Text.Parser.Char(CharParsing, string)
import Papa
data AipHref =
AipHref {
_aiphrefpg ::
AipPg
, _aiphrefdate ::
AipDate
, _aiphrefversion ::
Digit
} deriving (Eq, Ord, Show)
makeClassy ''AipHref
parseAipHref ::
(CharParsing p, Monad p) =>
p AipHref
parseAipHref =
string "aip.asp?pg=" *>
(AipHref <$> parseAipPg <* string "&vdate=" <*> parseAipDate <* string "&ver=" <*> parsedigit)
uriAipHref ::
HasAipHref s =>
s
-> String
uriAipHref ahref =
concat
[
"?pg="
, show (ahref ^. aipHref . aippg1)
, show (ahref ^. aipHref . aippg2)
, "&vdate="
, show (ahref ^. aipHref . day1)
, show (ahref ^. aipHref . day2)
, "-"
, show (ahref ^. aipHref . month)
, "-"
, show (ahref ^. aipHref . year1)
, show (ahref ^. aipHref . year2)
, show (ahref ^. aipHref . year3)
, show (ahref ^. aipHref . year4)
, "&ver="
, show (ahref ^. aipHref . hasdigit)
]
instance HasAipPg AipHref where
aipPg =
aiphrefpg . aipPg
instance HasAipDate AipHref where
aipDate =
aiphrefdate . aipDate
instance HasDigit AipHref where
hasdigit =
aiphrefversion . hasdigit
instance HasDay AipHref where
day =
aipDate . day
instance HasMonth AipHref where
month =
aipDate . month
instance HasYear AipHref where
year =
aipDate . year