roc/cli/examples/EchoName.roc
2019-07-09 23:19:50 -04:00

72 lines
1.7 KiB
Text

succeed = \val =>
Success val
fail = \val =>
Failure val
echo = \str =>
Echo fail succeed str
readInput =
Read fail succeed
map = \convert task =>
after task \output =>
succeed (convert output)
mapErr = \convert task =>
fallback task \err =>
fail (convert err)
after = \task cont =>
case task
when Success val then cont val
when Failure val then Failure val
when Echo onFailure prevCont str then
Echo
(\ioErr => after (onFailure ioErr) cont)
(\{} => after (prevCont {}) cont)
str
when Read onFailure prevCont then
Read
(\ioErr => after (onFailure ioErr) cont)
(\str => after (prevCont str) cont)
fallback = \task onFailure =>
case task
when Success val then Success val
when Failure val then onFailure val
when Echo prevOnFailure cont str then
Echo
(\ioErr => fallback (prevOnFailure ioErr) onFailure)
(\{} => fallback (cont {}) onFailure)
str
when Read prevOnFailure cont then
Read
(\ioErr => fallback (prevOnFailure ioErr) onFailure)
(\str => fallback (cont str) onFailure)
###############################################################
# In the future everything above here will be in a platform. #
###############################################################
program =
after (echo "What is your first name?") \{} =>
after readInput \firstName =>
after (echo "Hi \(firstName)! What is your last name?") \{} =>
after readInput \lastName =>
echo "Your full name is: \(firstName) \(lastName)"
program