Sorry, misunderstood. Here is another try:

#staload
"libats/SATS/list_vt.sats"
#staload
"libats/SATS/stream_vt.sats"

extern
fun
{xx:vtflt}
{xs:vtflt}
{x0:vtflt}
gseq_concat(xx): xs

local
sexpdef f = list0_vt
in
impltmp
(a:vtflt)
gseq_concat<f(f(a))><f(a)><a>(xx) = list0_vt_concat<a>(xx)
end // local

local
sexpdef f = stream_vt
in
impltmp
(a:vtflt)
gseq_concat<f(f(a))><f(a)><a>(xx) = stream_vt_concat<a>(xx)
end // local

On Sun, Jun 2, 2019 at 8:12 PM aditya siram <aditya.si...@gmail.com> wrote:

>
> Ah thanks for letting me know that.
>
> But my question was more about writing functions that can operate on any
> types that can be parameterized by other types. For example in Haskell a
> type 'm a' may stand in for 'stream_vt(a)', 'list_vt(a)' and so on and the
> function 'join' of type 'm (m a) -> m a' would equivalent of the
> 'glseq_concat' that I'm trying to implement. From your answer I guess there
> is no way to abstract similarly in ATS?
>
> Thanks!
>
>
> On Sunday, June 2, 2019 at 4:26:58 PM UTC-5, gmhwxi wrote:
>>
>> Say we have glseq_...<xs><x0>.
>>
>> The idea is that xs can be treated as the type for a sequence containing
>> elements of type x.
>>
>> For 'concat', we may have
>>
>> fun{xx:vtflt}{xs:vtflt}{x0:vtflt} glseq_concat_stream(xx): stream_vt(x0)
>>
>> As 'concat' returns a sequence, it can have a eager version (list) and
>> also a lazy version (stream).
>> The above one is the stream version. The basic idea is: xx can be seen as
>> a sequence of xs,
>> and xs can be seen as a sequence of x0.
>>
>> I added an implemention in the following directory:
>>
>>
>> https://github.com/githwxi/ATS-Temptory/blob/master/libats/temp/bucs320/DATS/glseq.dats
>>
>> BUCS320 is a class I have taught for years. Code put in the above
>> directory usually do not involve
>> dependent types (but do involve linear types). Fancier code gets to be
>> put in libats/temp/bucs520.
>>
>>
>>
>> On Sun, Jun 2, 2019 at 3:39 PM aditya siram <adity...@gmail.com> wrote:
>>
>>> Hi,
>>> I'm working with ATS-Temptory and trying to add a function,
>>> 'glseq_concat', which generalizes over, for example:
>>>
>>>
>>> fun
>>> {a:vtflt}
>>> steam_vt_concat(stream_vt(stream_vt(a))): stream_vt(a)
>>>
>>> but I can't find a way of passing in a general type that is
>>> parameterized in a type. I want to write:
>>>
>>> extern fun
>>> {xs: ...}
>>> {x: ...}
>>> glseq_concat
>>>   (a:xs(xs(x))):xs(x)
>>>
>>>
>>> Is there any way to encode this?
>>>
>>> --
>>> 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-lan...@googlegroups.com.
>>> To post to this group, send email to ats-lan...@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/b3fdf7fc-0a2e-4f86-8eb6-8a084330f518%40googlegroups.com
>>> <https://groups.google.com/d/msgid/ats-lang-users/b3fdf7fc-0a2e-4f86-8eb6-8a084330f518%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/a93d6fbb-7f2e-4dc9-a1e6-0d90d16d9d9a%40googlegroups.com
> <https://groups.google.com/d/msgid/ats-lang-users/a93d6fbb-7f2e-4dc9-a1e6-0d90d16d9d9a%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/CAPPSPLqNJRdYcNxxRkfL7Cq8n%2BzDmLK3wee83J5n9uBne1DKTw%40mail.gmail.com.

Reply via email to