1.

When [a] is a linear type, a?! is only the data part of [a] (that is, there
is no view in a?!).
When [a] is non-linear, then a?! is just [a].

2. When [a] is large (containing many bytes), call-by-reference can be more
efficient. The convention
    in ATS is to use call-by-reference when linear data is handled.

3. The 'xs' on the right-hand side is a variable (with address); its
content needs to be taken out before free@ can be called.




On Thu, Jul 14, 2016 at 9:20 AM, Steinway Wu <steinway...@gmail.com> wrote:

> Hi,
>
> In `stream_vt.dats`, I saw the following snippets,
>
> fun {a:vt0p} {b:vt0p} stream_vt_map_con (xs: stream_vt (a)) :
> stream_vt_con (b) = let
>     val xs_con = !xs
> in
>     case+ xs_con of
>     | @stream_vt_cons(x, xs) => let
>         val y = stream_vt_map$fopr<a><b> (x) // fopr is of type
> {a,b:vt@ype} &a >> a?! -> b
>         val xs = xs
>         val () = free@ (xs_con)
>       in
>         stream_vt_cons{b}(y, stream_vt_map<a><b> (xs))
>       end
>     | ~stream_vt_nil((*void*)) => stream_vt_nil()
> end
>
>
> and I have three questions.
>
> 1. what is a?!
> 2. why fopr takes &a, instead of just a?
> 3. what happened when val xs = xs
>
> Thanks,
>
> --
> 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/a443c141-c62d-49a3-88d9-68ab64640cbb%40googlegroups.com
> <https://groups.google.com/d/msgid/ats-lang-users/a443c141-c62d-49a3-88d9-68ab64640cbb%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/CAPPSPLpJmK0T4-eZdx56EEZB%3DOPVHf1DmwTCB1sG%2BycGAftLaA%40mail.gmail.com.

Reply via email to