herf-time: haskell time manipulation in a 'kerf like' style.

[ bsd3, kerf, library, time ] [ Propose Tags ] [ Report a vulnerability ]

The herf-time package attempts to make the time package's syntax more straightforward for doing interval math and conversion. It borrows heavily from the syntax of the kerf programming language https://github.com/kevinlawler/kerf . But unlike kerf, there are no promisses of high performance code here. The performance seems adequate for lots of uses though and manipulating time in the herf library is pretty fun.

The KerfTime module is self contained and the only dependency is the time package.

Add intervals of varying amounts.

date 2016 01 01 `add` hour 3 `add` week 16 `add` month 3 :: UTCHerfTime

UTCHerfTime 2016-07-22 03:00:00 UTC

Subtract intervals as well

date 2016 01 01 `add` hour (-3) `add` week (-16) `add` month (-3) :: UTCHerfTime

UTCHerfTime 2015-06-10 21:00:00 UTC

Use the same interval notation for different time representation

dateTime 2016 01 01 01 23 01 `add` (hour 3) `add` (week 16) `add` (month 3) :: UTCHerfTime

UTCHerfTime 2016-07-22 04:23:01 UTC

(reherf $ ( dateTime 2016 01 01 01 01 01 :: HerfZonedTime "CST")) :: HerfZonedTime "PST"

2015-12-31T23:01:01:PST

zt <- getZonedTime
herfShow zt

"2016-01-21T11:29:05:CST"

reherfz zt :: HerfZonedTime "PST"

2016-01-21T09:29:05:PST

reherfz zt :: HerfZonedTime "+0600"

2016-01-21T23:29:05:+0600

reherfz zt :: HerfZonedTime "CST"

2016-01-21T11:29:05:CST

(reherfz zt) `add` month 2 :: HerfZonedTime "CST"

2016-03-21T11:29:05:CST

(reherfz zt) `add` month 2 :: HerfZonedTime "PST"

2016-03-21T09:29:05:PST


[Skip to Readme]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.1.0, 0.2.0, 0.2.2, 0.3.0, 0.3.1
Change log ChangeLog.md
Dependencies base (>=4 && <5), time [details]
License BSD-3-Clause
Author Scott Murphy <scottmurphy09@gmail.com>
Maintainer Scott Murphy <scottmurphy09@gmail.com>
Category Time, Kerf
Source repo head: git clone https://github.com/smurphy8/herf-time
Uploaded by scottmurphy09 at 2020-04-28T17:43:10Z
Distributions NixOS:0.3.1
Reverse Dependencies 1 direct, 0 indirect [details]
Downloads 3084 total (14 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2020-04-28 [all 1 reports]

Readme for herf-time-0.3.1

[back to package description]

herf-time

Circle CI

Haskell's time library is nice but I wanted to be able to do some of the operations in the Kerf programming language.

By creating a set of type classes: HerfedTime , ToUTCHerfTime, FromUTCHerfTime I think there is a nice mechanism to do just that.

any instance of these 3 classes should satisfy the law:

  • Path Independant on all addtion
  • addX a X == unherf (addX (herf a) X )
    • where: addX := {addYear , addMonth, addWeek ...}

Tutorial

Herf Tutorial

Usage

Add Intervals

>>> date 2016 01 01 `add` hour 3 `add` week 16 `add` month 3 :: UTCTime
UTCHerfTime 2016-07-22 03:00:00 UTC

Subtract Intervals


>>> date 2016 01 01 `add` hour (-3) `add` week (-16) `add` month (-3) :: UTCTime
UTCHerfTime 2015-06-10 21:00:00 UTC

Represent Time in Multiple Ways


>>> dateTime 2016 01 01 01 23 01 `add` hour 3 `add` week 16 `add` month 3 :: UTCTime
UTCHerfTime 2016-07-22 04:23:01 UTC
>>> dateTimePico 2016 01 01 01 23 01 01 `add` hour 3 `add` week 16 `add` month 3 :: UTCTime
UTCHerfTime 2016-07-22 04:23:01.000000000001 UTC

Get Times in any HerfedTime format (UTC for example)

>>> date 2016 01 01 `add` hour 3 `add` week 16 `add` month 3   :: UTCTime
2016-07-22 03:00:00 UTC

Use HerfTime.ZonedTime to convert easily between times

(reherf $ ( dateTime 2016 01 01 01 01 01 :: HerfZonedTime "CST")) :: HerfZonedTime "PST" 2015-12-31T23:01:01:PST

Some fancier examples (Using HerfTime.ZonedTime)

λ> zt <- getZonedTime
λ> herfShow zt
"2016-01-21T11:29:05:CST"
λ> reherfz zt :: HerfZonedTime "PST"
2016-01-21T09:29:05:PST
λ> reherfz zt :: HerfZonedTime "+0600"
2016-01-21T23:29:05:+0600
λ> reherfz zt :: HerfZonedTime "CST"
2016-01-21T11:29:05:CST
λ> (reherfz zt) `add` month 2 :: HerfZonedTime "CST"
2016-03-21T11:29:05:CST

-- What time will it be exactly 3 months from now in California?
λ> (reherfz zt) `add` month 2 :: HerfZonedTime "PST"
2016-03-21T09:29:05:PST
cabal configure --enable-tests && cabal build && cabal test