It also typechecks if I do '!i' instead of just 'i' so I guess it's passed in as a reference and needs to be dereferenced before passing it along:
fun foo(s:int): stream_vt(stream_vt(@(int,int))) = stream_vt_map_cloptr<int><stream_vt(@(int,int))>( streamize_intrange_lr(1,10), lam(i) =<cloptr1> stream_vt_map_cloptr<int><(int,int)>( streamize_intrange_lr(1,10), lam(j) =<cloptr1> @(!i,j) ) ) But in this example I didn't need to deference 'i' before adding to it: fun bar(s:int): stream_vt(int) = stream_vt_map_cloptr<int><int>( streamize_intrange_lr(1,10), lam(i) =<cloptr1> i+1 ) So while I've solved my original problem I still don't know why it works. On Sunday, January 6, 2019 at 7:04:09 AM UTC-6, aditya siram wrote: > > But this typechecks and I don't understand why: > > fun foo(s:int): stream_vt(stream_vt(@(int,int))) = > stream_vt_map_cloptr<int><stream_vt(@(int,int))>( > streamize_intrange_lr(1,10), > lam(i) =<cloptr1> > let > val i = i (* added this *) > in > stream_vt_map_cloptr<int><(int,int)>( > streamize_intrange_lr(1,10), > lam(j) =<cloptr1> @(i,j) > ) > end > ) > > > > > On Sunday, January 6, 2019 at 6:32:27 AM UTC-6, aditya siram wrote: >> >> Hi, >> I'm trying to take the cross product of two finite streams using nested >> 'cloptr' and I can't get it to typecheck, here's what I have: >> >> fun foo(s:int): stream_vt(stream_vt(@(int,int))) = >> stream_vt_map_cloptr<int><stream_vt(@(int,int))>( >> streamize_intrange_lr(1,10), >> lam(i) =<cloptr1> >> stream_vt_map_cloptr<int><(int,int)>( >> streamize_intrange_lr(1,10), >> lam(j) =<cloptr1> @(i,j) >> ) >> ) >> >> I want to cross (1..10) with (1..10) and get a stream of >> (1,1),(1,2),(1,3) ... but I get an error on the 'lam(j) =<cloptr1> @(i,j)' >> line: >> >> ...: dereference cannot be performed: the proof search for view located >> at [S2Evar(i(14251))] failed to turn up a result. >> ...: the dynamic expression cannot be assigned the type [S2Etyrec(flt0; >> npf=-1; 0=S2Ecst(int), 1=S2Ecst(int))]. >> >> >> The same thing works if instead of nesting a 'stream_vt_map_cloptr' I >> construct an explicit 'fun loop' inside the body of the first 'lam' that >> takes 'i' as an argument. >> >> Why is there a difference? >> >> -- 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/eaa59b79-17e8-4e4b-8bc9-4d369b8dfe89%40googlegroups.com.