mirror of
https://github.com/roc-lang/roc.git
synced 2025-10-03 08:34:33 +00:00
Update cli example platform
This commit is contained in:
parent
6dcea4f151
commit
7b70e9b0e4
6 changed files with 43 additions and 36 deletions
|
@ -1,12 +1,16 @@
|
||||||
app "echo"
|
app "echo"
|
||||||
packages { base: "platform/" }
|
packages { base: "platform" }
|
||||||
imports [ base.Task.{ after }, base.Stdout, base.Stdin ]
|
imports [ base.Task.{ await }, base.Stdout, base.Stdin ]
|
||||||
provides [ main ] to base
|
provides [ main ] to base
|
||||||
|
|
||||||
main : Task.Task {} *
|
main : Task.Task {} *
|
||||||
main =
|
main =
|
||||||
after (Stdout.line "What's your first name?") \{} ->
|
{} <- await (Stdout.line "What's your first name?")
|
||||||
after Stdin.line \firstName ->
|
|
||||||
after (Stdout.line "What's your last name?") \{} ->
|
firstName <- await Stdin.line
|
||||||
after Stdin.line \lastName ->
|
|
||||||
|
{} <- await (Stdout.line "What's your last name?")
|
||||||
|
|
||||||
|
lastName <- await Stdin.line
|
||||||
|
|
||||||
Stdout.line "Hi, \(firstName) \(lastName)!"
|
Stdout.line "Hi, \(firstName) \(lastName)!"
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
platform folkertdev/foo
|
platform rtfeldman/roc-cli
|
||||||
requires { main : ThisIsTotallyIgnoredApparently } # TODO FIXME
|
requires { main : Task.Task {} * } # TODO FIXME
|
||||||
exposes [] # TODO FIXME actually expose modules
|
exposes [] # TODO FIXME actually expose modules
|
||||||
packages {}
|
packages {}
|
||||||
imports [ Task ] # TODO FIXME Task.{ Task }
|
imports [ Task ] # TODO FIXME Task.{ Task }
|
||||||
provides [ mainForHost ]
|
provides [ mainForHost ]
|
||||||
effects Effect
|
effects fx.Effect
|
||||||
{
|
{
|
||||||
putChar : I64 -> Effect {},
|
putChar : I64 -> Effect {},
|
||||||
putLine : Str -> Effect {},
|
putLine : Str -> Effect {},
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
interface Stdin
|
interface Stdin
|
||||||
exposes [ line ]
|
exposes [ line ]
|
||||||
imports [ Effect, Task ]
|
imports [ fx.Effect, Task ]
|
||||||
|
|
||||||
line : Task.Task Str *
|
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
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
interface Stdout
|
interface Stdout
|
||||||
exposes [ line ]
|
exposes [ line ]
|
||||||
imports [ Effect, Task ] # TODO FIXME Task.{ Task }
|
imports [ fx.Effect, Task ] # TODO FIXME Task.{ Task }
|
||||||
|
|
||||||
line : Str -> Task.Task {} *
|
line : Str -> Task.Task {} *
|
||||||
line = \str -> Effect.map (Effect.putLine str) (\_ -> Ok {})
|
line = \str -> Effect.map (Effect.putLine str) (\_ -> Ok {})
|
||||||
|
|
|
@ -1,31 +1,34 @@
|
||||||
interface Task
|
interface Task
|
||||||
exposes [ Task, after, always, fail, map, putLine, getLine ]
|
exposes [ Task, succeed, fail, await, map, putLine ]
|
||||||
imports [ Effect ]
|
imports [ fx.Effect ]
|
||||||
|
|
||||||
Task a err : Effect.Effect (Result a err)
|
|
||||||
|
|
||||||
always : a -> Task a *
|
Task ok err : Effect.Effect (Result ok err)
|
||||||
always = \x -> Effect.always (Ok x)
|
|
||||||
|
|
||||||
|
succeed : val -> Task val *
|
||||||
|
succeed = \val ->
|
||||||
|
Effect.always (Ok val)
|
||||||
|
|
||||||
|
|
||||||
fail : err -> Task * err
|
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 : Str -> Task {} *
|
||||||
putLine = \line -> Effect.map (Effect.putLine line) (\_ -> Ok {})
|
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
|
|
||||||
|
|
|
@ -52,7 +52,7 @@ pub fn roc_fx_getLine() -> RocStr {
|
||||||
let stdin = io::stdin();
|
let stdin = io::stdin();
|
||||||
let line1 = stdin.lock().lines().next().unwrap().unwrap();
|
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 {
|
unsafe fn call_the_closure(function_pointer: *const u8, closure_data_ptr: *const u8) -> i64 {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue