stream_vt_con is considered an internal type; it should be kept as such.

>> fun {a,b:vt@ype} stream_vt_map$fopr (a -<cloref1> b): b

This is probably easier to use but less efficient when [a] is large. In C,
one rarely passes a big struct; always
passes a pointer to a big struct.

stream_vt is very different from stream; stream_vt is essentially just one
node (while stream is a list of nodes).
So when using stream_vt, one may use stream_vt(T) for a very big flat T.

On Thu, Jul 14, 2016 at 1:40 PM, Steinway Wu <steinway...@gmail.com> wrote:

> What about this? Let the worker function consume a. And in map, free the
> constructor, instead of unfold the constructor.
>
> fun {a,b:vt@ype} stream_vt_map_con (xs: stream_vt a): stream_vt_con b
> fun {a,b:vt@ype} stream_vt_map$fopr (a -<cloref1> b): b
>
>
>
> On Thursday, July 14, 2016 at 10:39:08 AM UTC-4, gmhwxi wrote:
>>
>> 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 <> 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/f72cd27d-4084-41b6-a6fe-b94a7e3e1563%40googlegroups.com
> <https://groups.google.com/d/msgid/ats-lang-users/f72cd27d-4084-41b6-a6fe-b94a7e3e1563%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/CAPPSPLoiCK3WqJn63SjQsmSThNYpxFbfwUfkyeRcqVGW8pck%3DQ%40mail.gmail.com.

Reply via email to