Skip to content

Commit e576f5b

Browse files
committed
Data.Thyme: move tutorial to Data.Thyme.Docs; wrote more
1 parent b4ad81e commit e576f5b

File tree

4 files changed

+374
-122
lines changed

4 files changed

+374
-122
lines changed

src/Data/Thyme.hs

Lines changed: 1 addition & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -1,118 +1,4 @@
1-
{- | "Data.Thyme" is a speed-optimized rewrite (with a bit of extra type-safety)
2-
of the excellent "Data.Time" module in the @time@ library.
3-
4-
= Design
5-
6-
== Implementation
7-
8-
The performance improvement of "Data.Thyme" comes chiefly from representing
9-
times internally as primitive unlifted 'Data.Int.Int64' instead of
10-
lifted 'Integer', as is done in "Data.Time".
11-
12-
The tradeoffs for this design can be generalized as:
13-
14-
* Data.Time.Clock.'Data.Time.Clock.DiffTime' has a precision
15-
of /1 picosecond/.
16-
17-
- Data.Thyme.Clock.'Data.Thyme.Clock.DiffTime' has a precision
18-
of /1 microsecond/.
19-
20-
* Data.Time.Clock.'Data.Time.Clock.UTCTime' has unbounded range.
21-
22-
- Data.Thyme.Clock.'Data.Thyme.Clock.UTCTime' has a range of about a
23-
half million years, from /-290419-11-07 19:59:05.224192 UTC/
24-
to /294135-11-26 04:00:54.775807 UTC/. It is therefore not
25-
Y294K-compliant.
26-
27-
28-
29-
"Data.Thyme" uses strict and unpacked tuples throughout, e.g. 'YearMonthDay' or
30-
'Data.Thyme.Calendar.WeekDate.WeekDate'. Descriptive 'Int' synonyms such
31-
as 'Year' and 'DayOfMonth' are also provided.
32-
33-
On platforms where 'Int' is 64-bits wide, types with an 'Enum' instance
34-
such as 'Day' can be used as 'Data.IntMap.Key's for 'Data.IntMap.IntMap', preferably
35-
via the @EnumMap@ wrapper provided by
36-
<http://hackage.haskell.org/package/enummapset-th>. In any case the 'Ord'
37-
instances are much faster, if you must use 'Data.Map.Map'.
38-
39-
== API
40-
41-
Conversions are provided as "Control.Lens.Iso"s from the
42-
<http://hackage.haskell.org/package/lens lens> package, while
43-
'Data.AdditiveGroup.AdditiveGroup', 'Data.VectorSpace.VectorSpace' and
44-
'Data.AffineSpace.AffineSpace' from
45-
<http://hackage.haskell.org/package/vector-space vector-space> allow for
46-
more principled operations instead of 'Num', 'Fractional' & al.
47-
48-
"Data.Thyme.Time" is a drop-in replacement module compatible with
49-
"Data.Time".
50-
51-
= Brief Tutorial By Example
52-
53-
===== Let's start by getting the current UTC date and time from the local system clock.
54-
55-
@
56-
import "Data.Thyme.Clock"
57-
58-
__t₀__ <- 'Data.Thyme.Clock.getCurrentTime'
59-
'show' __t₀__
60-
@
61-
@
62-
"2016-04-06 03:50:11.159991 UTC"
63-
@
64-
65-
===== What date and time is it in my local time zone, formatted to my default locale?
66-
67-
@
68-
import "Control.Lens"
69-
import "System.Locale"
70-
import "Data.Thyme.LocalTime"
71-
import "Data.Thyme.Format"
72-
73-
tz <- 'Data.Thyme.LocalTime.getCurrentTimeZone'
74-
'Data.Thyme.Format.formatTime' 'System.Locale.defaultTimeLocale' \"%c\" $ (tz, __t₀__) 'Control.Lens.Operators.^.' 'Data.Thyme.LocalTime.zonedTime'
75-
@
76-
@
77-
"Wed Apr 6 12:50:11 JST 2016"
78-
@
79-
80-
===== What wall-clock time will it be /1000/ seconds from now?
81-
82-
@
83-
import "Data.AffineSpace"
84-
85-
(tz, __t₀__ 'Data.AffineSpace.+^' 'Data.Thyme.Clock.fromSeconds'' 1000) 'Control.Lens.Operators.^.' 'Data.Thyme.LocalTime.zonedTime' . 'Data.Thyme.LocalTime._zonedTimeToLocalTime' . 'Data.Thyme.LocalTime._localTimeOfDay'
86-
@
87-
@
88-
13:06:51.159991
89-
@
90-
91-
===== About how long has it been since the Unix Era began at the Unix Epoch of /midnight, January first, 1970/?
92-
93-
@
94-
import "Data.Thyme.Format.Human"
95-
import "Data.Thyme.Time.Core"
96-
97-
"We are about " ++ 'Data.Thyme.Format.Human.humanTimeDiff' (__t₀__ 'Data.AffineSpace..-.' 'Data.Thyme.Time.Core.mkUTCTime' ('Data.Thyme.Time.Core.fromGregorian' 1970 1 1) ('Data.Thyme.Clock.hhmmss' 0 0 0)) ++ " into the Unix Era."
98-
@
99-
@
100-
"We are about 5 decades into the Unix Era."
101-
@
102-
103-
===== Two months from today, what day of the week will it be?
104-
105-
@
106-
import "Data.Thyme.Calendar"
107-
108-
'Data.Thyme.Format.formatTime' 'System.Locale.defaultTimeLocale' \"%A\" $ 'Control.Lens.Getter.view' 'Data.Thyme.Calendar.WeekDate.weekDate' $ 'Control.Lens.Setter.over' 'Data.Thyme.Calendar.gregorian' ('Data.Thyme.Calendar.gregorianMonthsClip' 2) $ 'Control.Lens.Getter.view' 'Data.Thyme.Clock._utctDay' __t₀__
109-
@
110-
@
111-
\"Monday\"
112-
@
113-
114-
-}
115-
1+
-- | This simply re-exports some commonly-used modules.
1162
module Data.Thyme
1173
( module Data.Thyme.Calendar
1184
, module Data.Thyme.Clock

0 commit comments

Comments
 (0)