mirror of
https://github.com/roc-lang/roc.git
synced 2024-09-22 08:17:40 +03:00
30 lines
827 B
Plaintext
30 lines
827 B
Plaintext
app "echo"
|
|
packages { pf: "platform" }
|
|
imports [ pf.Stdin, pf.Stdout, pf.Task ]
|
|
provides [ main ] to pf
|
|
|
|
main : Task.Task {} []
|
|
main =
|
|
_ <- Task.await (Stdout.line "🗣 Shout into this cave and hear the echo! 👂👂👂")
|
|
Task.loop {} (\_ -> Task.map tick Step)
|
|
|
|
tick : Task.Task {} []
|
|
tick =
|
|
shout <- Task.await Stdin.line
|
|
Stdout.line (echo shout)
|
|
|
|
echo : Str -> Str
|
|
echo = \shout ->
|
|
silence = \length ->
|
|
spaceInUtf8 = 32
|
|
List.repeat length spaceInUtf8
|
|
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 ""
|