I see. A pattern like '~xs' is problematic as not every linear value can be
freed.

On Wednesday, May 16, 2018 at 11:54:38 AM UTC-4, aditya siram wrote:
>
> I meant why couldn't you still a '~' on the 'xs' like 
> | (~Some_vt(~nested(~Some_vt(~list_vt_cons(x,~xs)))), ... =>
>
>
>
> On Wednesday, May 16, 2018 at 8:59:48 AM UTC-5, gmhwxi wrote:
>>
>> The pattern ~list_vt_cons(x, xs) means the list constructor/node (that 
>> matches it) is freed;
>> the head of the list is stored in 'x' and the tail in 'xs'.
>>
>> On Wed, May 16, 2018 at 9:56 AM, aditya siram <aditya...@gmail.com> 
>> wrote:
>>
>>> Awesome, thanks! I think my confusion was mostly that the error messages 
>>> complained about needing to retain a linear variable instead of consuming 
>>> it so I never tried to free them. Also why did 'xs' have to freed 
>>> explicitly with 'free(xs)' instead of using the '~' syntax in the pattern 
>>> match?
>>>
>>>
>>> On Tuesday, May 15, 2018 at 9:35:14 PM UTC-5, gmhwxi wrote:
>>>>
>>>> Here is some code that typechecks:
>>>>
>>>> implement add_heads(a,b) =
>>>>   case (a,b) of
>>>>   | (~None_vt(),g) => g
>>>>   | (l, ~None_vt()) => l
>>>>   | (~Some_vt(~nested(~Some_vt(~list_vt_cons(x,xs)))),
>>>>      ~Some_vt(~nested(~Some_vt(~list_vt_cons(y,ys))))) =>
>>>>     (free(xs); Some_vt(nested(Some_vt(list_vt_cons(x+y,ys)))))
>>>>
>>>> Some warnings are issued due to non-exhaustiveness of pattern matching 
>>>> involved.
>>>>
>>>>
>>>>
>>>> On Tue, May 15, 2018 at 10:27 PM, aditya siram <aditya...@gmail.com> 
>>>> wrote:
>>>>
>>>>>
>>>>> #include "share/atspre_staload.hats"
>>>>>
>>>>> datavtype nested = nested of (Option_vt(List_vt(int)))
>>>>>
>>>>> extern fun add_heads(
>>>>>   a : Option_vt(nested),
>>>>>   b : Option_vt(nested)
>>>>> ): Option_vt(nested)
>>>>>
>>>>> implement add_heads(a,b) =
>>>>>   case (a,b) of
>>>>>     | (~None_vt(),g) => g
>>>>>     | (l, ~None_vt()) => l
>>>>>     | (Some_vt(nested(Some_vt(list_vt_cons(x,_)))),
>>>>>          Some_vt(nested(Some_vt(list_vt_cons(y,ys))))) =>
>>>>>        Some_vt(nested(Some_vt(list_vt_cons(x+y,ys))))
>>>>>
>>>>> implement main0(argc,argv) = ()
>>>>>
>>>>>
>>>>> The above is a minimal non-compiling example from a larger program. I 
>>>>> even tried adding '@' to the pattern match with 'fold@' in the body but 
>>>>> it 
>>>>> didn't work.
>>>>>
>>>>> Thanks!
>>>>>
>>>>> On Tuesday, May 15, 2018 at 8:28:33 PM UTC-5, gmhwxi wrote:
>>>>>>
>>>>>> Oops. I am NOT so clear ...
>>>>>>
>>>>>> On Tue, May 15, 2018 at 9:27 PM, Hongwei Xi <gmh...@gmail.com> wrote:
>>>>>>
>>>>>>> I am so clear as to what you need precisely.
>>>>>>>
>>>>>>> Could you show me how to do it using pattern matching repeatly?
>>>>>>> Then I may be able to do it using a nested pattern.
>>>>>>>
>>>>>>> Here is an example that may be useful:
>>>>>>>
>>>>>>> | ~Some_vt(~Some_vt(xs as list_vt_cons _)) => // using xs here
>>>>>>>
>>>>>>> The two Some_vt constructors are freed but list_vt_cons is not.
>>>>>>>
>>>>>>> On Tue, May 15, 2018 at 9:04 PM, aditya siram <aditya...@gmail.com> 
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Hi all,
>>>>>>>> I'm sure there's an easy answer to this but I'm not having much 
>>>>>>>> luck. How do I destructure into a view type that nested in another 
>>>>>>>> viewtype? For example, I'd to pattern match on something of type 
>>>>>>>> 'Option_vt(Option_vt(list_vt int))'. I'm not having much luck doing it 
>>>>>>>> in 
>>>>>>>> one fell swoop like: ' | Some_vt(Some_vt(list_vt_cons(x, xs))) => ...' 
>>>>>>>> especially when the linear proof of some inner value (like 'x') needs 
>>>>>>>> to be 
>>>>>>>> preserved.
>>>>>>>>
>>>>>>>> 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-user...@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/e196b40c-7b12-45f1-abe6-4edb9d4bf3fd%40googlegroups.com
>>>>>>>>  
>>>>>>>> <https://groups.google.com/d/msgid/ats-lang-users/e196b40c-7b12-45f1-abe6-4edb9d4bf3fd%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-user...@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/46a9a11a-362c-426b-b479-5537a0a5aa8e%40googlegroups.com
>>>>>  
>>>>> <https://groups.google.com/d/msgid/ats-lang-users/46a9a11a-362c-426b-b479-5537a0a5aa8e%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-user...@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/5fd6e746-bc68-4a8c-92fe-5208be72fd69%40googlegroups.com
>>>  
>>> <https://groups.google.com/d/msgid/ats-lang-users/5fd6e746-bc68-4a8c-92fe-5208be72fd69%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/4a1b7738-c6b5-4fd7-bb99-982b3606db05%40googlegroups.com.

Reply via email to