roc/cli/Example.roc
2019-06-19 21:33:01 -04:00

67 lines
1.5 KiB
Text

Example exposes [ program ]
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)"
# In the future, everything below here will be in a platform.
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)