Thanks for the help everyone, I wrote a post on using GADTs based on
my explorations:
https://bluishcoder.co.nz/2018/10/16/generalized-algebraic-data-types-in-ats.html
I'll have a play around with some of the other ideas. Trying some of
the other common GADT examples tends to hit the similar
I slightly learn Prolog for the design of ATS3.
My opinion is following:
## Variable is useful
```
$ cat family.pl
father(naoyuki, hyogo).
father(saburo, naoyuki).
father(saburo, shinji).
father(yoshihisa, hisako).
mother(hisako, hyogo).
mother(yoko, naoyuki).
mother(yoko, shinji).