Safe Haskell | None |
---|---|
Language | Haskell2010 |
This module introduces function to format and parse time in desired way.
- type AllTimes = '[Fortnight, Week, Day, Hour, Minute, Second, Millisecond, Microsecond, Nanosecond, Picosecond]
- class SeriesF (units :: [Rat]) where
- unitsF :: forall unit. KnownRatName unit => Time unit -> String
- class SeriesP (units :: [Rat]) where
- unitsP :: forall unit. KnownRatName unit => String -> Maybe (Time unit)
Documentation
type AllTimes = '[Fortnight, Week, Day, Hour, Minute, Second, Millisecond, Microsecond, Nanosecond, Picosecond] Source #
Type-level list that consist of all times.
Formatting
class SeriesF (units :: [Rat]) where Source #
Class for time formatting.
Examples
>>>
seriesF @'[Day, Hour, Minute, Second] (minute 4000)
"2d18h40m"
>>>
seriesF @'[Day, Minute, Second] (minute 4000)
"2d1120m"
>>>
seriesF @'[Hour, Minute, Second] (sec 3601)
"1h1s"
>>>
seriesF @'[Hour, Second, Millisecond] (Time @Minute $ 3 % 2)
"90s"
>>>
seriesF @'[Hour, Second] (minute 0)
"0h"
>>>
seriesF @'[Hour, Minute, Second] (Time @Day (2 % 7))
"6h51m25+5/7s"
The received list should be in descending order. It would be verified at compile-time.
Example of the error from ghci
:
# 127 "srcTimeSeries.hs"
unitsF :: forall unit. KnownRatName unit => Time unit -> String Source #
Similar to seriesF
, but formats using all time units of the library.
>>>
unitsF $ fortnight 5
"5fn"
>>>
unitsF $ minute 4000
"2d18h40m"
Parsing
class SeriesP (units :: [Rat]) where Source #
Class for time parsing.
Empty string on input will be parsed as 0 time of the required time unit:
>>>
seriesP @'[Hour, Minute, Second] @Second ""
Just (0s)
Examples
>>>
seriesP @'[Day, Hour, Minute, Second] @Minute "2d18h40m"
Just (4000m)
>>>
seriesP @'[Day, Minute, Second] @Minute "2d1120m"
Just (4000m)
>>>
seriesP @'[Hour, Minute, Second] @Second "1h1s"
Just (3601s)
>>>
seriesP @'[Hour, Second, Millisecond] @Minute "90s"
Just (1+1/2m)
>>>
seriesP @'[Hour, Second] @Second "11ns"
Nothing
>>>
seriesP @'[Hour, Minute] @Minute "1+1/2h"
Nothing
>>>
seriesP @'[Hour, Minute] @Minute "1+1/2m"
Just (1+1/2m)
>>>
seriesP @'[Hour, Minute] @Minute "1h1+1/2m"
Just (61+1/2m)
Note: The received list should be in descending order. It would be verified at compile-time.