mirror of
https://github.com/roc-lang/roc.git
synced 2025-10-01 07:41:12 +00:00
add other effect functions
This commit is contained in:
parent
539f173472
commit
f1b4d535c6
4 changed files with 38 additions and 18 deletions
|
@ -4749,10 +4749,33 @@ fn reuse_function_symbol<'a>(
|
||||||
) -> Stmt<'a> {
|
) -> Stmt<'a> {
|
||||||
match procs.partial_procs.get(&original) {
|
match procs.partial_procs.get(&original) {
|
||||||
None => {
|
None => {
|
||||||
// danger: a foreign symbol may not be specialized!
|
let is_imported =
|
||||||
debug_assert!(
|
!(env.home == original.module_id() || original.module_id() == ModuleId::ATTR);
|
||||||
env.home == original.module_id() || original.module_id() == ModuleId::ATTR
|
|
||||||
);
|
match arg_var {
|
||||||
|
Some(arg_var) if is_imported => {
|
||||||
|
let layout = layout_cache
|
||||||
|
.from_var(env.arena, arg_var, env.subs)
|
||||||
|
.expect("creating layout does not fail");
|
||||||
|
|
||||||
|
procs.insert_passed_by_name(
|
||||||
|
env,
|
||||||
|
arg_var,
|
||||||
|
original,
|
||||||
|
layout.clone(),
|
||||||
|
layout_cache,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
// danger: a foreign symbol may not be specialized!
|
||||||
|
debug_assert!(
|
||||||
|
!is_imported,
|
||||||
|
"symbol {:?} while processing module {:?}",
|
||||||
|
original,
|
||||||
|
(env.home, &arg_var),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,5 +5,4 @@ app "effect-example"
|
||||||
|
|
||||||
main : Task.Task {} F64
|
main : Task.Task {} F64
|
||||||
main =
|
main =
|
||||||
# Task.after (Task.always "foo") (\_ -> Task.always {})
|
Task.after (Task.getLine {}) \lineThisThing -> Task.putLine lineThisThing
|
||||||
Task.after (Task.putLine "foo") \{} -> Task.putLine "bar"
|
|
||||||
|
|
|
@ -2,20 +2,15 @@ platform folkertdev/foo
|
||||||
requires { main : Effect {} }
|
requires { main : Effect {} }
|
||||||
exposes []
|
exposes []
|
||||||
packages {}
|
packages {}
|
||||||
imports []
|
imports [Task]
|
||||||
provides [ mainForHost ]
|
provides [ mainForHost ]
|
||||||
effects Effect
|
effects Effect
|
||||||
{
|
{
|
||||||
putLine : Str -> Effect {}
|
putChar : I64 -> Effect {},
|
||||||
|
putLine : Str -> Effect {},
|
||||||
|
getLine : {} -> Effect Str
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# putChar : I64 -> Effect {},
|
mainForHost : Task.Task {} F64 as Fx
|
||||||
# getLine : Effect Str
|
|
||||||
|
|
||||||
|
|
||||||
Effect a : [ Effect ({} -> a) ]
|
|
||||||
Task a err : Effect (Result a err)
|
|
||||||
|
|
||||||
mainForHost : Task {} F64 as Fx
|
|
||||||
mainForHost = main
|
mainForHost = main
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
interface Task
|
interface Task
|
||||||
exposes [ Task, after, always, fail, putLine, map ]
|
exposes [ Task, after, always, fail, map, putLine, getLine ]
|
||||||
imports [ Effect ]
|
imports [ Effect ]
|
||||||
|
|
||||||
Task a err : Effect.Effect (Result a err)
|
Task a err : Effect.Effect (Result a err)
|
||||||
|
@ -10,6 +10,9 @@ always = \x -> Effect.always (Ok x)
|
||||||
fail : err -> Task * err
|
fail : err -> Task * err
|
||||||
fail = \x -> Effect.always (Err x)
|
fail = \x -> Effect.always (Err x)
|
||||||
|
|
||||||
|
getLine : {} -> Task Str *
|
||||||
|
getLine = \{} -> Effect.after (Effect.getLine {}) always
|
||||||
|
|
||||||
putLine : Str -> Task {} *
|
putLine : Str -> Task {} *
|
||||||
putLine = \line -> Effect.map (Effect.putLine line) (\_ -> Ok {})
|
putLine = \line -> Effect.map (Effect.putLine line) (\_ -> Ok {})
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue