blob: f30e7de4287cdf38811f45ffadc6ba3ea76728c9 (
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
|
## Copyright (c) Eduardo Julian. All rights reserved.
## This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
## If a copy of the MPL was not distributed with this file,
## You can obtain one at http://mozilla.org/MPL/2.0/.
(;module:
lux
(lux (control monad)
(data [bool]
[char]
[number]
[text]
[ident]
(struct [list "" Monad<List>]))
[type]
[compiler]
(macro [ast]
["s" syntax #+ syntax: Syntax])))
## [Syntax]
(def: #hidden _append_
(-> Text Text Text)
(:: text;Monoid<Text> append))
(syntax: #export (format {fragments (s;many s;any)})
{#;doc (doc "Text interpolation as a macro."
(format "Static part " (%t static) " doesn't match URI: " uri))}
(wrap (list (` ($_ _append_ (~@ fragments))))))
## [Formatters]
(type: (Formatter a)
(-> a Text))
(do-template [<name> <type> <formatter>]
[(def: #export <name>
(Formatter <type>)
<formatter>)]
[%b Bool (:: bool;Codec<Text,Bool> encode)]
[%n Nat (:: number;Codec<Text,Nat> encode)]
[%i Int (:: number;Codec<Text,Int> encode)]
[%f Frac (:: number;Codec<Text,Frac> encode)]
[%r Real (:: number;Codec<Text,Real> encode)]
[%c Char (:: char;Codec<Text,Char> encode)]
[%t Text (:: text;Codec<Text,Text> encode)]
[%ident Ident (:: ident;Codec<Text,Ident> encode)]
[%ast AST ast;to-text]
[%type Type type;to-text]
)
(def: #export (%list formatter)
(All [a] (-> (Formatter a) (Formatter (List a))))
(lambda [values]
(format "(list " (text;join-with " " (map formatter values)) ")")))
|