Skip to content

Commit

Permalink
Add a YMD record and use this in date cases of IgcRecord, #249.
Browse files Browse the repository at this point in the history
  • Loading branch information
philderbeast committed Mar 16, 2019
1 parent bae6385 commit b290813
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 12 deletions.
6 changes: 4 additions & 2 deletions igc/library/Flight/Igc/Fix.hs
Expand Up @@ -16,6 +16,8 @@ type Fix t a = (t, a)
type Pos = (Lat, Lng, AltBaro, Maybe AltGps)
type IgcFix = Fix HMS Pos

-- |
-- prop> igcEqOrEqOnTime x x == True
igcEqOrEqOnTime :: IgcRecord -> IgcRecord -> Bool
igcEqOrEqOnTime (B t0 _ _ _ _) (B t1 _ _ _ _) = t0 == t1
igcEqOrEqOnTime a b = a == b
Expand Down Expand Up @@ -54,12 +56,12 @@ mark
-> b
mark _ Ignore _ = mempty
mark _ B{} _ = mempty
mark f (HFDTEDATE (Day dd) (Month mm) (Year yy) _) xs =
mark f HFDTEDATE{ymd = YMD{year = Year yy, month = Month mm, day = Day dd}} xs =
f Nothing ts
where
ys = catMaybes $ extract <$> xs
ts = [stamp (dd, mm, yy) `first` y | y <- ys]
mark f (HFDTE (Day dd) (Month mm) (Year yy)) xs =
mark f (HFDTE YMD{year = Year yy, month = Month mm, day = Day dd}) xs =
f Nothing ts
where
ys = catMaybes $ extract <$> xs
Expand Down
11 changes: 9 additions & 2 deletions igc/library/Flight/Igc/Parse.hs
Expand Up @@ -147,23 +147,30 @@ fix = do
dateHFDTEDATE :: ParsecT Void String Identity IgcRecord
dateHFDTEDATE = do
_ <- string "HFDTEDATE:"

dd <- Day <$> count 2 digitChar
mm <- Month <$> count 2 digitChar
yy <- Year <$> count 2 digitChar
let ymd = YMD {year = yy, month = mm, day = dd}

_ <- string ","
nn <- Nth <$> count 2 digitChar
return $ HFDTEDATE dd mm yy nn

return $ HFDTEDATE {ymd = ymd, nth = nn}

-- |
-- >>> parseTest dateHFDTE "HFDTE0301181"
-- 2018-01-03
dateHFDTE :: ParsecT Void String Identity IgcRecord
dateHFDTE = do
_ <- string "HFDTE"

dd <- Day <$> count 2 digitChar
mm <- Month <$> count 2 digitChar
yy <- Year <$> count 2 digitChar
return $ HFDTE dd mm yy
let ymd = YMD {year = yy, month = mm, day = dd}

return $ HFDTE ymd

ignore :: ParsecT Void String Identity IgcRecord
ignore = do
Expand Down
25 changes: 17 additions & 8 deletions igc/library/Flight/Igc/Record.hs
Expand Up @@ -2,6 +2,7 @@ module Flight.Igc.Record
(
-- * Data
IgcRecord(..)
, YMD(..)
, HMS(..)
, Lat(..)
, Lng(..)
Expand Down Expand Up @@ -90,6 +91,13 @@ newtype Day = Day String
newtype Nth = Nth String
deriving (Eq, Ord)

data YMD = YMD {year :: Year, month :: Month, day :: Day}
deriving (Eq, Ord)

instance Show YMD where
show YMD{year = Year y, month = Month m, day = Day d} =
concat ["20", y, "-", m, "-", d]

-- |
-- The record types are:
--
Expand All @@ -111,9 +119,9 @@ data IgcRecord
-- | A location fix
= B HMS Lat Lng AltBaro (Maybe AltGps)
-- | The newer date header record
| HFDTEDATE Day Month Year Nth
| HFDTEDATE {ymd :: YMD, nth :: Nth}
-- | The older date header record
| HFDTE Day Month Year
| HFDTE YMD
-- | Any other record type is ignored
| Ignore
deriving (Eq, Ord)
Expand All @@ -127,10 +135,9 @@ instance Show IgcRecord where
, show altB
, "(" ++ show altG ++ ")"
]
show (HFDTEDATE (Day d) (Month m) (Year y) (Nth n)) =
concat ["20", y, "-", m, "-", d, ", ", n]
show (HFDTE (Day d) (Month m) (Year y)) =
concat ["20", y, "-", m, "-", d]
show (HFDTEDATE {ymd, nth = Nth n}) =
concat [show ymd, ", ", n]
show (HFDTE ymd) = show ymd
show Ignore = ""

instance Arbitrary Hour where
Expand Down Expand Up @@ -204,14 +211,16 @@ instance Arbitrary IgcRecord where
d <- Day <$> arbitrary
m <- Month <$> arbitrary
y <- Year <$> arbitrary
let ymd = YMD {year = y, month = m, day = d}
n <- Nth <$> arbitrary
return $ HFDTEDATE d m y n
return $ HFDTEDATE {ymd = ymd, nth = n}

d2 = do
d <- Day <$> arbitrary
m <- Month <$> arbitrary
y <- Year <$> arbitrary
return $ HFDTE d m y
let ymd = YMD {year = y, month = m, day = d}
return $ HFDTE ymd

-- |
-- >>> addHoursHms (Hour "0") (HMS (Hour "0") (Minute "0") (Second "0"))
Expand Down
1 change: 1 addition & 0 deletions igc/test-suite-doctest/DocTest.hs
Expand Up @@ -14,6 +14,7 @@ arguments =
, "-XParallelListComp"
, "-XScopedTypeVariables"
, "-XDeriveGeneric"
, "-XNamedFieldPuns"
]

main :: IO ()
Expand Down

0 comments on commit b290813

Please sign in to comment.