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

View file

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