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.