Ah, very nice. So the moral seems to be to fully annotate all template functions.
On Sunday, December 10, 2017 at 8:58:43 AM UTC-6, gmhwxi wrote: > > I changed char to charNZ, and it actually worked! > > On Sun, Dec 10, 2017 at 9:52 AM, aditya siram <[email protected] > <javascript:>> wrote: > >> Oh, thanks! >> >> So if I wanted to return '(int, charNZ)' instead I'd need some kind of >> 'praxi' asserting that it's not null? >> >> >> On Sunday, December 10, 2017 at 8:41:18 AM UTC-6, gmhwxi wrote: >> >>> This is the best I could come up with. >>> >>> Mixing templates with dependent types almost always >>> causes problems. >>> >>> (* ****** ****** *) >>> // >>> #include >>> "share/atspre_staload.hats" >>> // >>> fn >>> length_last >>> {l:nat | l > 1 } >>> ( >>> s: string l >>> ) : (int, char) = let >>> typedef tenv = (int, char) >>> var env: tenv = (0,s.head()) >>> implement >>> stream_vt_foreach$fwork<char><tenv>(c,env) = env := (env.0 + 1, c) >>> val-~stream_vt_nil() = >>> stream_vt_foreach_env<char><tenv>(streamize_string_char(s.tail()), >>> env) >>> in >>> env >>> end >>> >>> implement >>> main0() = let >>> val >>> tup = >>> length_last("abcde") >>> in >>> println! ("(", tup.0, ", ", tup.1, ")") >>> end // end of [main0] >>> >>> >>> On Sun, Dec 10, 2017 at 9:06 AM, aditya siram <[email protected]> >>> wrote: >>> >>>> Hi, >>>> I'm trying to pass and mutate a stack allocated tuple in a string >>>> processing function: >>>> >>>> fn length_last >>>> {l:nat | l > 1 } >>>> ( >>>> s: string l >>>> ): (int, char) = >>>> let >>>> var env = (0,s.head()) >>>> implement stream_vt_foreach$fwork<charNZ><(int,charNZ)>(c,env) = >>>> env := (env.0 + 1, c) >>>> val _ = stream_vt_foreach_env( >>>> streamize_string_char(s.tail()), >>>> env >>>> ) >>>> in >>>> env >>>> end >>>> >>>> The stack allocated 'env' should finally have the length of the string >>>> and the last character after 'stream_vt_foreach_env' is run. Instead I get >>>> compile errors like: >>>> length_last.dats:15:13: the dynamic expression should be a left-value >>>> but it is not. >>>> >>>> length_last.dats:11:3: the linear dynamic variable [env$view$5548(-1)] >>>> is preserved but with an incompatible type. >>>> >>>> length_last.dats:11:3: mismatch of static terms (tyleq): >>>> >>>> The actual term is: S2Etop(knd=0; [1]) >>>> [1]: S2EVar(5260) >>>> The needed term is: S2Etyrec(flt0; npf=-1; 0=S2Etop(knd=0; S2Etop(knd=0 >>>> ; [1])), 1=S2Etop(knd=0; S2Etop(knd=0; [2]))) >>>> [1]: g1int_int_t0ype(int_kind, 0) >>>> [2]: charNZ >>>> >>>> length_last.dats:11:3: mismatch of static terms (tyleq): >>>> >>>> The actual term is: S2Eat(S2Etop(knd=0; [1]); [2]) >>>> [1]: S2EVar(5260) >>>> [2]: env >>>> The needed term is: S2Eat(S2Etyrec(flt0; npf=-1; 0=S2Etop(knd=0; S2Etop >>>> (knd=0; [1])), 1=S2Etop(knd=0; S2Etop(knd=0; [2]))); [3]) >>>> [1]: g1int_int_t0ype(int_kind, 0) >>>> [2]: charNZ >>>> [3]: env >>>> patsopt(TRANS3): there are [2] errors in total. >>>> exit(ATS): uncaught exception: >>>> _2home_2deech_2Downloads_2ATS_2ATS2_2src_2pats_error_2esats__FatalErrorExn >>>> (1025) >>>> >>>> Is the problem that I'm passing a stack allocated tuple as the >>>> environment? >>>> >>>> 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 [email protected]. >>>> To post to this group, send email to [email protected]. >>>> 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/012ab377-9bd9-401d-b738-b9a3efbfd841%40googlegroups.com >>>> >>>> <https://groups.google.com/d/msgid/ats-lang-users/012ab377-9bd9-401d-b738-b9a3efbfd841%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 [email protected] <javascript:>. >> To post to this group, send email to [email protected] >> <javascript:>. >> 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/fb4f195c-38b8-4ef9-adbf-ab0deadbcfc0%40googlegroups.com >> >> <https://groups.google.com/d/msgid/ats-lang-users/fb4f195c-38b8-4ef9-adbf-ab0deadbcfc0%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 [email protected]. To post to this group, send email to [email protected]. 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/7fd486e8-f1bf-4454-a94d-72d913cf9a7e%40googlegroups.com.
