Re: Why my code occurs `unsolved constraint` error?

2018-11-01 Thread Kiwamu Okabe
Dear Hongwei and Artyom,

On Fri, Nov 2, 2018 at 12:03 PM gmhwxi  wrote:
> The way you wrote the code makes it a bit difficult to
> do typechecking. Try to change the interface for utf8_to_unicode
> as follows:

Thanks! It's fixed!

https://travis-ci.org/metasepi/uemacs-bohai/builds/449662253

> I think the reason for having to annotate it is due to a hit on performance in
> constraint solving. I think I read about this in one of HX's papers.

Could you tell me where is the paper? > Artyom


What do I think such `unsolved constraint` error?
How to approach it?
Should I think "Umm it may needs more addr annotation"?

Best regards,
-- 
Kiwamu Okabe at METASEPI DESIGN

-- 
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/CAEvX6dmp%3DGVgxME1_8XbdpdKMwq%2BH8rSSXwjLLoRzoM1XV6tEg%40mail.gmail.com.


Re: Why my code occurs `unsolved constraint` error?

2018-11-01 Thread gmhwxi


The way you wrote the code makes it a bit difficult to
do typechecking. Try to change the interface for utf8_to_unicode
as follows:

extern
fun
utf8_to_unicode
{l1:addr}
{i,m:nat | i < m}
{l2:addr}
( pf: !unicode_t@l1
| line: !strnptr(l2,m), index: int(i), len: int(m), res: ptr(l1)): uint = 
"ext#utf8_to_unicode"



On Thursday, November 1, 2018 at 10:30:58 PM UTC-4, Kiwamu Okabe wrote:
>
> Dear Artyom, 
> thanks for your kind reply. 
>
> On Thu, Nov 1, 2018 at 5:12 PM Artyom Shalkhakov 
>  wrote: 
> > You should put at at every branch (so on every [if] and on every 
> [case]). That's because the 
> > variable [line] is of linear type, and the annotation basically says 
> that in every alternative of 
> > the branch it's going to be preserved (so, after the evaluation of an 
> [if] or a [case] the type of 
> > [line] is going to still be [strnptr(m)]). I think the reason for having 
> to annotate it is due to a hit 
> > on performance in constraint solving. I think I read about this in one 
> of HX's papers. 
> > 
> > I think in your case, you'll have to annotate two [if]s: 
> > 
> > 
> https://github.com/metasepi/uemacs-bohai/blob/9ecdd06fe09e6433ed0fb4271c0e5b44d2ad8f8d/DATS/utf8.dats#L48
>  
> > 
> https://github.com/metasepi/uemacs-bohai/blob/9ecdd06fe09e6433ed0fb4271c0e5b44d2ad8f8d/DATS/utf8.dats#L55
>  
> > 
> > Could you try it? You could also try to annotate only one [if] to find a 
> minimal required annotation that keeps the typechecker silent. :-) 
>
> Sorry. I think it doesn't make sense... 
> I have an stupid question. I wrote following code: 
>
> ``` 
>   val bytes = if ($UN.cast{int}{char} c < 0xc0):( line: strnptr(m) ) 
> then 1U 
> else bytes' where { 
>   (* Ok, it's 11xx, do a stupid decode *) 
>   val (mask, bytes'') = loop1 (c, 0x20U, 0x2U) 
>
>   (* Invalid? Do it as a single byte Latin1 *) 
>   val bytes' = if (bytes'' > 6 || bytes'' > len):( line: strnptr(m) ) 
> then 1U 
> else bytes'' where { 
> ``` 
>
> But above causes following errors: 
>
> ``` 
> $ make 
>   ATS  utf8.dats.c 
> /home/kiwamu/src/uemacs-bohai/DATS/utf8.dats: 1645(line=48, offs=57) 
> -- 1654(line=48, offs=66): error(2): sort application is not 
> supported. 
> /home/kiwamu/src/uemacs-bohai/DATS/utf8.dats: 1639(line=48, offs=51) 
> -- 1643(line=48, offs=55): error(2): the static identifier [line] is 
> unrecognized. 
> /home/kiwamu/src/uemacs-bohai/DATS/utf8.dats: 1639(line=48, offs=51) 
> -- 1643(line=48, offs=55): error(2): the static expression is of the 
> sort [S2RTerr()] but it is expected to be of the sort [S2RTerr()]. 
> /home/kiwamu/src/uemacs-bohai/DATS/utf8.dats: 1639(line=48, offs=51) 
> -- 1655(line=48, offs=67): error(2): the static expression needs to be 
> impredicative but is assigned the sort [S2RTerr()]. 
> /home/kiwamu/src/uemacs-bohai/DATS/utf8.dats: 1908(line=55, offs=62) 
> -- 1917(line=55, offs=71): error(2): sort application is not 
> supported. 
> /home/kiwamu/src/uemacs-bohai/DATS/utf8.dats: 1902(line=55, offs=56) 
> -- 1906(line=55, offs=60): error(2): the static identifier [line] is 
> unrecognized. 
> /home/kiwamu/src/uemacs-bohai/DATS/utf8.dats: 1902(line=55, offs=56) 
> -- 1906(line=55, offs=60): error(2): the static expression is of the 
> sort [S2RTerr()] but it is expected to be of the sort [S2RTerr()]. 
> /home/kiwamu/src/uemacs-bohai/DATS/utf8.dats: 1902(line=55, offs=56) 
> -- 1918(line=55, offs=72): error(2): the static expression needs to be 
> impredicative but is assigned the sort [S2RTerr()]. 
> patsopt(TRANS2): there are [8] errors in total. 
> exit(ATS): uncaught exception: 
> _2home_2kiwamu_2src_2ATS_2dPostiats_2src_2pats_error_2esats__FatalErrorExn(1025)
>  
>
> ``` 
>
> Where and what should I inject your annotation? 
>
> Best regards, 
> -- 
> Kiwamu Okabe at METASEPI DESIGN 
>

-- 
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/a082671f-6236-4660-a55d-c45797287baa%40googlegroups.com.


Re: Why my code occurs `unsolved constraint` error?

2018-11-01 Thread Kiwamu Okabe
Dear Artyom,
thanks for your kind reply.

On Thu, Nov 1, 2018 at 5:12 PM Artyom Shalkhakov
 wrote:
> You should put at at every branch (so on every [if] and on every [case]). 
> That's because the
> variable [line] is of linear type, and the annotation basically says that in 
> every alternative of
> the branch it's going to be preserved (so, after the evaluation of an [if] or 
> a [case] the type of
> [line] is going to still be [strnptr(m)]). I think the reason for having to 
> annotate it is due to a hit
> on performance in constraint solving. I think I read about this in one of 
> HX's papers.
>
> I think in your case, you'll have to annotate two [if]s:
>
> https://github.com/metasepi/uemacs-bohai/blob/9ecdd06fe09e6433ed0fb4271c0e5b44d2ad8f8d/DATS/utf8.dats#L48
> https://github.com/metasepi/uemacs-bohai/blob/9ecdd06fe09e6433ed0fb4271c0e5b44d2ad8f8d/DATS/utf8.dats#L55
>
> Could you try it? You could also try to annotate only one [if] to find a 
> minimal required annotation that keeps the typechecker silent. :-)

Sorry. I think it doesn't make sense...
I have an stupid question. I wrote following code:

```
  val bytes = if ($UN.cast{int}{char} c < 0xc0):( line: strnptr(m) )
then 1U
else bytes' where {
  (* Ok, it's 11xx, do a stupid decode *)
  val (mask, bytes'') = loop1 (c, 0x20U, 0x2U)

  (* Invalid? Do it as a single byte Latin1 *)
  val bytes' = if (bytes'' > 6 || bytes'' > len):( line: strnptr(m) )
then 1U
else bytes'' where {
```

But above causes following errors:

```
$ make
  ATS  utf8.dats.c
/home/kiwamu/src/uemacs-bohai/DATS/utf8.dats: 1645(line=48, offs=57)
-- 1654(line=48, offs=66): error(2): sort application is not
supported.
/home/kiwamu/src/uemacs-bohai/DATS/utf8.dats: 1639(line=48, offs=51)
-- 1643(line=48, offs=55): error(2): the static identifier [line] is
unrecognized.
/home/kiwamu/src/uemacs-bohai/DATS/utf8.dats: 1639(line=48, offs=51)
-- 1643(line=48, offs=55): error(2): the static expression is of the
sort [S2RTerr()] but it is expected to be of the sort [S2RTerr()].
/home/kiwamu/src/uemacs-bohai/DATS/utf8.dats: 1639(line=48, offs=51)
-- 1655(line=48, offs=67): error(2): the static expression needs to be
impredicative but is assigned the sort [S2RTerr()].
/home/kiwamu/src/uemacs-bohai/DATS/utf8.dats: 1908(line=55, offs=62)
-- 1917(line=55, offs=71): error(2): sort application is not
supported.
/home/kiwamu/src/uemacs-bohai/DATS/utf8.dats: 1902(line=55, offs=56)
-- 1906(line=55, offs=60): error(2): the static identifier [line] is
unrecognized.
/home/kiwamu/src/uemacs-bohai/DATS/utf8.dats: 1902(line=55, offs=56)
-- 1906(line=55, offs=60): error(2): the static expression is of the
sort [S2RTerr()] but it is expected to be of the sort [S2RTerr()].
/home/kiwamu/src/uemacs-bohai/DATS/utf8.dats: 1902(line=55, offs=56)
-- 1918(line=55, offs=72): error(2): the static expression needs to be
impredicative but is assigned the sort [S2RTerr()].
patsopt(TRANS2): there are [8] errors in total.
exit(ATS): uncaught exception:
_2home_2kiwamu_2src_2ATS_2dPostiats_2src_2pats_error_2esats__FatalErrorExn(1025)
```

Where and what should I inject your annotation?

Best regards,
-- 
Kiwamu Okabe at METASEPI DESIGN

-- 
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/CAEvX6dncwYH3vuA8NBoJ4jQ57aP2iLR%2Bz9Ak66x3hk2JN7otMw%40mail.gmail.com.


Re: Why my code occurs `unsolved constraint` error?

2018-11-01 Thread Artyom Shalkhakov
Hi Kiwamu,

чт, 1 нояб. 2018 г. в 10:00, Kiwamu Okabe :

> Dear Artyom and Hongwei,
> sorry for my late reply.
>
> On Mon, Oct 29, 2018 at 5:17 PM Artyom Shalkhakov
>  wrote:
> > While I'm not sure why your code fails, it's an interesting project
> you've started.
>
> Thanks. It's very fun and good exercise for me.
>
> > Actually, I have an idea about your code. You may have to an annotation
> like...
>
> Thanks for your advice. But it's not clear for me...
>
> > if :( line: strnptr(m) ) => .. then ... else ... onto your conditionals.
>
> Where line of my code should follow your advice?
>
>
> https://github.com/metasepi/uemacs-bohai/blob/9ecdd06fe09e6433ed0fb4271c0e5b44d2ad8f8d/DATS/utf8.dats
>
>
You should put at at every branch (so on every [if] and on every [case]).
That's because the variable [line] is of linear type, and the annotation
basically says that in every alternative of the branch it's going to be
preserved (so, after the evaluation of an [if] or a [case] the type of
[line] is going to still be [strnptr(m)]). I think the reason for having to
annotate it is due to a hit on performance in constraint solving. I think I
read about this in one of HX's papers.

I think in your case, you'll have to annotate two [if]s:

https://github.com/metasepi/uemacs-bohai/blob/9ecdd06fe09e6433ed0fb4271c0e5b44d2ad8f8d/DATS/utf8.dats#L48
https://github.com/metasepi/uemacs-bohai/blob/9ecdd06fe09e6433ed0fb4271c0e5b44d2ad8f8d/DATS/utf8.dats#L55

Could you try it? You could also try to annotate only one [if] to find a
minimal required annotation that keeps the typechecker silent. :-)

>
> Best regards,
> --
> Kiwamu Okabe at METASEPI DESIGN
>
> --
> 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/CAEvX6d%3Dsb8%3DkqyLc0j3bipb16_zp26FsdZ%3DfD5Q0g5k7f9ZM3g%40mail.gmail.com
> .
>


-- 
Cheers,
Artyom Shalkhakov

-- 
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/CAKO6%3Dqh5yYagiaTtB32BD5RV_3ZwwMkJ4_thZ_%2BR-McjR_FjTw%40mail.gmail.com.


Re: Why my code occurs `unsolved constraint` error?

2018-11-01 Thread Kiwamu Okabe
Dear Artyom and Hongwei,
sorry for my late reply.

On Mon, Oct 29, 2018 at 5:17 PM Artyom Shalkhakov
 wrote:
> While I'm not sure why your code fails, it's an interesting project you've 
> started.

Thanks. It's very fun and good exercise for me.

> Actually, I have an idea about your code. You may have to an annotation 
> like...

Thanks for your advice. But it's not clear for me...

> if :( line: strnptr(m) ) => .. then ... else ... onto your conditionals.

Where line of my code should follow your advice?

https://github.com/metasepi/uemacs-bohai/blob/9ecdd06fe09e6433ed0fb4271c0e5b44d2ad8f8d/DATS/utf8.dats

Best regards,
--
Kiwamu Okabe at METASEPI DESIGN

-- 
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/CAEvX6d%3Dsb8%3DkqyLc0j3bipb16_zp26FsdZ%3DfD5Q0g5k7f9ZM3g%40mail.gmail.com.