blob: b2db48900bed62c3a388c1bbc47d0dbaaec199d5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
(.module:
[library
[lux "*"
[abstract
[monad {"+" [do]}]]
[control
["[0]" io]
["[0]" try]
["[0]" exception {"+" [exception:]}]
["<>" parser ("[1]\[0]" functor)
["<c>" code {"+" [Parser]}]]]
[data
["[0]" text
["%" format {"+" [format]}]]]
[time
["[0]" instant]
["[0]" date {"+" [Date]} ("[1]\[0]" order)]]
["[0]" meta]
[macro
["[0]" code]
["[0]" template]
[syntax {"+" [syntax:]}]]]])
(exception: .public (must_remember [deadline Date
today Date
message Text
focus (Maybe Code)])
(exception.report
["Deadline" (%.date deadline)]
["Today" (%.date today)]
["Message" message]
["Code" (case focus
(#.Some focus)
(%.code focus)
#.None
"")]))
(def: deadline
(Parser Date)
($_ <>.either
(<>\each (|>> instant.of_millis instant.date)
<c>.int)
(do <>.monad
[raw <c>.text]
(case (\ date.codec decoded raw)
(#try.Success date)
(in date)
(#try.Failure message)
(<>.failure message)))))
(syntax: .public (remember [deadline ..deadline
message <c>.text
focus (<>.maybe <c>.any)])
(let [now (io.run! instant.now)
today (instant.date now)]
(if (date\< deadline today)
(in (case focus
(#.Some focus)
(list focus)
#.None
(list)))
(meta.failure (exception.error ..must_remember [deadline today message focus])))))
(template [<name> <message>]
[(`` (syntax: .public (<name> [deadline ..deadline
message <c>.text
focus (<>.maybe <c>.any)])
(in (list (` (..remember (~ (code.text (%.date deadline)))
(~ (code.text (format <message> " " message)))
(~+ (case focus
(#.Some focus)
(list focus)
#.None
(list)))))))))]
[to_do "TODO"]
[fix_me "FIXME"]
)
|