aip-0.0.1: src/Data/Aviation/Aip/AipDate.hs
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE FlexibleInstances #-}
module Data.Aviation.Aip.AipDate(
AipDate(..)
, parseAipDate
, uriAipDate
, HasAipDate(..)
) where
import Data.Aviation.Aip.Day(Day(Day), HasDay(day), parseDay)
import Data.Aviation.Aip.Month(Month, HasMonth(month), parseMonth)
import Data.Aviation.Aip.Year(Year(Year), HasYear(year), parseYear)
import Text.Parser.Char(CharParsing, char)
import Papa
data AipDate =
AipDate {
_aipday ::
Day
, _aipmonth ::
Month
, _aipyear ::
Year
} deriving (Eq, Ord, Show)
makeClassy ''AipDate
parseAipDate ::
(CharParsing p, Monad p) =>
p AipDate
parseAipDate =
AipDate <$> parseDay <* char '-' <*> parseMonth <* char '-' <*> parseYear
instance HasDay AipDate where
day =
aipday . day
instance HasMonth AipDate where
month =
aipmonth . month
instance HasYear AipDate where
year =
aipyear . year
uriAipDate ::
AipDate
-> String
uriAipDate (AipDate (Day d1 d2) m (Year y1 y2 y3 y4)) =
concat
[
show d1
, show d2
, "-"
, show m
, "-"
, show y1
, show y2
, show y3
, show y4
]