The following line is problematic:

prval () = $effmask_all(x := env)

as assignment is definitely not a proof.

I suggest that you just do

val () = x := env

The compiler should allocate the same memory for both x and env.

Theoretically, you could separate x into two parts: data and (linear) proof;
only move the data into env; there is no need to move the data back from env
into x since the data is non-linear. Really not worth the trouble :)



On Sun, Feb 24, 2019 at 2:52 AM M88 <abysgr...@gmail.com> wrote:

> Hello,
>
> I have a viewtype and I am using it in a call-by-value function.  I want
> to temporarily assign it to a variable for use in a template that uses
> call-by-reference.
>
> Is there a way to assert that the variable has not been consumed?
>
> Right now I am doing this, which typechecks and compiles in my case:
>
> extern fun {env}
> some_template( env : &env >> _ ) : void
>
> fun f ( x: !VT) : void =
>     let
>          var env = x
>          val _ = some_template<VT>(env)
>          prval () = $effmask_all(
>                 x := env
>           )
>     in
>    end
>
> Is this expected behavior?  Is it possible to write a proof function that
> can restore "x"?
>
> ( Ultimately, x does not change, and the semantics of call-by-value seem
> best for this function ).
>
>
>
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "ats-lang-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to ats-lang-users+unsubscr...@googlegroups.com.
> To post to this group, send email to ats-lang-users@googlegroups.com.
> Visit this group at https://groups.google.com/group/ats-lang-users.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ats-lang-users/ce57d10d-cb0a-465f-b9f6-954d7d6678cb%40googlegroups.com
> <https://groups.google.com/d/msgid/ats-lang-users/ce57d10d-cb0a-465f-b9f6-954d7d6678cb%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"ats-lang-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ats-lang-users+unsubscr...@googlegroups.com.
To post to this group, send email to ats-lang-users@googlegroups.com.
Visit this group at https://groups.google.com/group/ats-lang-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ats-lang-users/CAPPSPLoRY2BOhYJxY7x_W2h2-FR6M3Q047Zd%2BHRS3tfa64Mfow%40mail.gmail.com.

Reply via email to