Use backpassing and await in task example

This commit is contained in:
Richard Feldman 2021-04-03 22:03:00 -04:00
parent 23f4f1f2d0
commit 6dcea4f151
2 changed files with 9 additions and 6 deletions

View file

@ -1,12 +1,15 @@
app "task-example"
packages { base: "platform" }
imports [ base.Task.{ Task, after }, base.File, base.Path ]
imports [ base.Task.{ Task }, base.File, base.Path ]
provides [ main ] to base
main : Task.Task {} (File.FileReadErr [BadUtf8])
main =
when Path.fromStr "Cargo.toml" is
Ok path ->
Task.after (Task.putLine "Our Cargo.toml:") \_ ->
Task.after (File.readUtf8 path) (\line -> Task.putLine line)
{} <- Task.await (Task.putLine "Our Cargo.toml:")
line <- Task.await (File.readUtf8 path)
Task.putLine line
_ -> Task.putLine "invalid path"

View file

@ -1,5 +1,5 @@
interface Task
exposes [ Task, succeed, fail, after, map, putLine ]
exposes [ Task, succeed, fail, await, map, putLine ]
imports [ fx.Effect ]
@ -16,8 +16,8 @@ fail = \val ->
Effect.always (Err val)
after : Task a err, (a -> Task b err) -> Task b err
after = \effect, transform ->
await : Task a err, (a -> Task b err) -> Task b err
await = \effect, transform ->
Effect.after effect \result ->
when result is
Ok a -> transform a