mirror of
https://github.com/roc-lang/roc.git
synced 2024-09-22 00:09:33 +03:00
34 lines
946 B
Plaintext
34 lines
946 B
Plaintext
app "echo"
|
|
packages { pf: "cli-platform/main.roc" }
|
|
imports [pf.Stdin, pf.Stdout, pf.Task]
|
|
provides [main] to pf
|
|
|
|
main : List Str -> Task.Task {} [] [Read [Stdin], Write [Stdout]]
|
|
main = \_args ->
|
|
_ <- Task.await (Stdout.line "🗣 Shout into this cave and hear the echo! 👂👂👂")
|
|
Task.loop {} (\_ -> Task.map tick Step)
|
|
|
|
tick : Task.Task {} [] [Read [Stdin]*, Write [Stdout]*]*
|
|
tick =
|
|
shout <- Task.await Stdin.line
|
|
Stdout.line (echo shout)
|
|
|
|
echo : Str -> Str
|
|
echo = \shout ->
|
|
silence = \length ->
|
|
spaceInUtf8 = 32
|
|
|
|
List.repeat spaceInUtf8 length
|
|
|
|
shout
|
|
|> Str.toUtf8
|
|
|> List.mapWithIndex
|
|
(\_, i ->
|
|
length = (List.len (Str.toUtf8 shout) - i)
|
|
phrase = (List.split (Str.toUtf8 shout) length).before
|
|
|
|
List.concat (silence (if i == 0 then 2 * length else length)) phrase)
|
|
|> List.join
|
|
|> Str.fromUtf8
|
|
|> Result.withDefault ""
|