mirror of
https://github.com/roc-lang/roc.git
synced 2025-10-01 07:41:12 +00:00
72 lines
1.7 KiB
Text
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
|