I think I miss-undertood datavtype.
In this case, it doesn't need to depend to int.

Following is a more simple version:

```ats
#include "share/atspre_define.hats"
#include "share/atspre_staload.hats"

typedef sockaddr_in = @{
  sin_port = int,
  sin_addr = int,
  sin_zero = int
}

typedef sockaddr_in6 = @{
  sin6_port = int,
  sin6_flowinfo = int,
  sin6_addr = int,
  sin6_scope_id = int
}

datavtype sockaddr =
| Af_inet of sockaddr_in
| Af_inet6 of sockaddr_in6

vtypedef wg_endpoint = @{
  e_remote = sockaddr
}

fun wg_input
{l1,l2:addr}
(pfe: !wg_endpoint@l1, pfso: !sockaddr@l2 | e: ptr l1, so: ptr l2):
void = let
    val () = !e.e_remote := so
  in
    ()
  end

implement main0 () = {
  var e: wg_endpoint
  var so: sockaddr
  prval pre = view@e
  prval prso = view@so
//  val () = wg_input(pre, prso | e, so)
  prval () = view@e := pre
  prval () = view@so := prso
}
```

But above causes the other errors:

```
$ patscc -o a.out main.dats -DATS_MEMALLOC_LIBC
/home/kiwamu/src/practice-ats/tagged_union/main.dats: 511(line=29,
offs=14) -- 528(line=29, offs=31): error(3): a linear component of the
following type is abandoned: [S2Ecst(sockaddr)].
/home/kiwamu/src/practice-ats/tagged_union/main.dats: 538(line=31,
offs=5) -- 540(line=31, offs=7): error(3): the linear dynamic variable
[pfe$4738(-1)] is preserved but with an incompatible typ
e.
/home/kiwamu/src/practice-ats/tagged_union/main.dats: 538(line=31,
offs=5) -- 540(line=31, offs=7): error(3): mismatch of static terms
(tyleq):
The actual term is: S2Eapp(S2Ecst(ptr_addr_type); S2Evar(l2(8481)))
The needed term is: S2Ecst(sockaddr)
/home/kiwamu/src/practice-ats/tagged_union/main.dats: 538(line=31,
offs=5) -- 540(line=31, offs=7): error(3): mismatch of static terms
(tyleq):
The actual term is: S2Etyrec(flt0; npf=-1;
e_remote=S2Eapp(S2Ecst(ptr_addr_type); S2Evar(l2(8481))))
The needed term is: S2Etyrec(flt0; npf=-1; e_remote=S2Ecst(sockaddr))
/home/kiwamu/src/practice-ats/tagged_union/main.dats: 538(line=31,
offs=5) -- 540(line=31, offs=7): error(3): mismatch of static terms
(tyleq):
The actual term is: S2Eat(S2Etyrec(flt0; npf=-1;
e_remote=S2Eapp(S2Ecst(ptr_addr_type); S2Evar(l2(8481))));
S2Evar(l1(8480)))
The needed term is: S2Eat(S2Etyrec(flt0; npf=-1;
e_remote=S2Ecst(sockaddr)); S2Evar(l1(8480)))
```

Something is wrong?

Best regards,
-- 
Kiwamu Okabe

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/ats-lang-users/CAEvX6dmgZGvdUkVG93ajPVscqD44A8t2P4_ucemqPkR%2BA52mCQ%40mail.gmail.com.

Reply via email to