aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/data/text/format.lux
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--stdlib/source/lux/data/text/format.lux22
1 files changed, 15 insertions, 7 deletions
diff --git a/stdlib/source/lux/data/text/format.lux b/stdlib/source/lux/data/text/format.lux
index 335c120be..392e3ee42 100644
--- a/stdlib/source/lux/data/text/format.lux
+++ b/stdlib/source/lux/data/text/format.lux
@@ -1,7 +1,9 @@
(.module:
[lux (#- list nat int rev type)
[abstract
- [monad (#+ do)]]
+ [monad (#+ do)]
+ [functor
+ ["." contravariant]]]
[control
["p" parser
["s" code (#+ Parser)]]]
@@ -31,15 +33,21 @@
[syntax (#+ syntax:)]]
["." type]])
+(type: #export (Format a)
+ {#.doc "A way to produce readable text from values."}
+ (-> a Text))
+
+(structure: #export functor
+ (contravariant.Functor Format)
+
+ (def: (map f fb)
+ (|>> f fb)))
+
(syntax: #export (format {fragments (p.many s.any)})
{#.doc (doc "Text interpolation."
(format "Static part " (text static) " does not match URI: " uri))}
(wrap (.list (` ($_ "lux text concat" (~+ fragments))))))
-(type: #export (Format a)
- {#.doc "A way to produce readable text from values."}
- (-> a Text))
-
(template [<name> <type> <formatter>]
[(def: #export <name>
(Format <type>)
@@ -60,8 +68,8 @@
[hex Nat (:: nat.hex encode)]
[xml xml.XML (:: xml.codec encode)]
[json json.JSON (:: json.codec encode)]
- [instant instant.Instant instant.to-text]
- [duration duration.Duration duration.encode]
+ [instant instant.Instant (:: instant.codec encode)]
+ [duration duration.Duration (:: duration.codec encode)]
[date date.Date (:: date.codec encode)]
[cursor Cursor .cursor-description]
)