fn send_value<T, C, A>(
val: T,
cont: PartialSession<C, A>,
) ->
PartialSession<C, SendValue<T, A>>
let p: Session<SendValue<String, End>> =
send_value("Hello World!".to_string(), terminate());
fn receive_value_from<N, C1, C2, T, A, B>(
n: N,
cont: impl FnOnce(T) -> PartialSession<C2, B>,
) -> PartialSession<C1, B>
C1
is in the form HList[…, N: SendValue<T, A>, …]
.
C2
is in the form HList[…, N: A, …]
, with the remaining elements
being the same as C1
.
let p: Session<ReceiveChannel<SendValue<String, End>, End>> =
receive_channel(move |c| {
receive_value_from(c, move |name| {
println!("Hello, {}!", name);
wait(c, terminate())
})
});