diff --git a/examples/cli/Echo.roc b/examples/cli/Echo.roc index b8a4b5596e..a601e0449c 100644 --- a/examples/cli/Echo.roc +++ b/examples/cli/Echo.roc @@ -1,12 +1,16 @@ app "echo" - packages { base: "platform/" } - imports [ base.Task.{ after }, base.Stdout, base.Stdin ] + packages { base: "platform" } + imports [ base.Task.{ await }, base.Stdout, base.Stdin ] provides [ main ] to base main : Task.Task {} * main = - after (Stdout.line "What's your first name?") \{} -> - after Stdin.line \firstName -> - after (Stdout.line "What's your last name?") \{} -> - after Stdin.line \lastName -> - Stdout.line "Hi, \(firstName) \(lastName)!" + {} <- await (Stdout.line "What's your first name?") + + firstName <- await Stdin.line + + {} <- await (Stdout.line "What's your last name?") + + lastName <- await Stdin.line + + Stdout.line "Hi, \(firstName) \(lastName)!" diff --git a/examples/cli/platform/Pkg-Config.roc b/examples/cli/platform/Pkg-Config.roc index 582ad21c09..0a017dc297 100644 --- a/examples/cli/platform/Pkg-Config.roc +++ b/examples/cli/platform/Pkg-Config.roc @@ -1,10 +1,10 @@ -platform folkertdev/foo - requires { main : ThisIsTotallyIgnoredApparently } # TODO FIXME +platform rtfeldman/roc-cli + requires { main : Task.Task {} * } # TODO FIXME exposes [] # TODO FIXME actually expose modules packages {} imports [ Task ] # TODO FIXME Task.{ Task } provides [ mainForHost ] - effects Effect + effects fx.Effect { putChar : I64 -> Effect {}, putLine : Str -> Effect {}, diff --git a/examples/cli/platform/Stdin.roc b/examples/cli/platform/Stdin.roc index f85182cd7a..b46406c6de 100644 --- a/examples/cli/platform/Stdin.roc +++ b/examples/cli/platform/Stdin.roc @@ -1,6 +1,6 @@ interface Stdin exposes [ line ] - imports [ Effect, Task ] + imports [ fx.Effect, Task ] line : Task.Task Str * -line = Effect.after Effect.getLine Task.always # TODO FIXME Effect.getLine should suffice +line = Effect.after Effect.getLine Task.succeed # TODO FIXME Effect.getLine should suffice diff --git a/examples/cli/platform/Stdout.roc b/examples/cli/platform/Stdout.roc index e38590599e..dafc6cf0db 100644 --- a/examples/cli/platform/Stdout.roc +++ b/examples/cli/platform/Stdout.roc @@ -1,6 +1,6 @@ interface Stdout exposes [ line ] - imports [ Effect, Task ] # TODO FIXME Task.{ Task } + imports [ fx.Effect, Task ] # TODO FIXME Task.{ Task } line : Str -> Task.Task {} * line = \str -> Effect.map (Effect.putLine str) (\_ -> Ok {}) diff --git a/examples/cli/platform/Task.roc b/examples/cli/platform/Task.roc index 85a7f927c2..87dba21adc 100644 --- a/examples/cli/platform/Task.roc +++ b/examples/cli/platform/Task.roc @@ -1,31 +1,34 @@ interface Task - exposes [ Task, after, always, fail, map, putLine, getLine ] - imports [ Effect ] + exposes [ Task, succeed, fail, await, map, putLine ] + imports [ fx.Effect ] -Task a err : Effect.Effect (Result a err) -always : a -> Task a * -always = \x -> Effect.always (Ok x) +Task ok err : Effect.Effect (Result ok err) + + +succeed : val -> Task val * +succeed = \val -> + Effect.always (Ok val) + fail : err -> Task * err -fail = \x -> Effect.always (Err x) +fail = \val -> + Effect.always (Err val) -getLine : Task Str * -getLine = Effect.after Effect.getLine always + +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 + Err err -> Task.fail err + +map : Task a err, (a -> b) -> Task b err +map = \effect, transform -> + Effect.after effect \result -> + when result is + Ok a -> Task.succeed (transform a) + Err err -> Task.fail err putLine : Str -> Task {} * putLine = \line -> Effect.map (Effect.putLine line) (\_ -> Ok {}) - -map : Task a err, (a -> b) -> Task b err -map = \task, transform -> - Effect.map task \res -> - when res is - Ok x -> Ok (transform x) - Err e -> Err e - -after : Task a err, (a -> Task b err) -> Task b err -after = \task, transform -> - Effect.after task \res -> - when res is - Ok x -> transform x - Err e -> Task.fail e diff --git a/examples/cli/platform/src/lib.rs b/examples/cli/platform/src/lib.rs index 0f753acdb4..3c3f90a089 100644 --- a/examples/cli/platform/src/lib.rs +++ b/examples/cli/platform/src/lib.rs @@ -52,7 +52,7 @@ pub fn roc_fx_getLine() -> RocStr { let stdin = io::stdin(); let line1 = stdin.lock().lines().next().unwrap().unwrap(); - RocStr::from_slice_with_capacity(line1.as_bytes(), line1.len()) + RocStr::from_slice(line1.as_bytes()) } unsafe fn call_the_closure(function_pointer: *const u8, closure_data_ptr: *const u8) -> i64 {