-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathquine.flix
33 lines (31 loc) · 1.15 KB
/
quine.flix
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
def expand(sub: List[(a, String)], s: String): String with ToString[a] =
List.foldLeft(
t -> kv ->
let (k, v) = kv;
String.replaceMatches(regex = "[{]${k}}", to = v, t),
s,
sub
)
def main(): Unit \ IO =
let sub = List#{('q', "\""), ('b', "\\\\"), ('d', "\\$")};
List.forEach(s -> expand(sub, s) |> println, ss());
List.forEach(s -> println(" \"${s}\" ::"), ss());
println(" Nil")
def ss(): List[String] =
"def expand(sub: List[(a, String)], s: String): String with ToString[a] =" ::
" List.foldLeft(" ::
" t -> kv ->" ::
" let (k, v) = kv;" ::
" String.replaceMatches(regex = {q}[{]{d}{k}}{q}, to = v, t)," ::
" s," ::
" sub" ::
" )" ::
"" ::
"def main(): Unit {b} IO =" ::
" let sub = List#{('q', {q}{b}{q}{q}), ('b', {q}{b}{b}{b}{b}{q}), ('d', {q}{b}{b}{d}{q})};" ::
" List.forEach(s -> expand(sub, s) |> println, ss());" ::
" List.forEach(s -> println({q} {b}{q}{d}{s}{b}{q} ::{q}), ss());" ::
" println({q} Nil{q})" ::
"" ::
"def ss(): List[String] =" ::
Nil