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.