I was looking into the rock-paper-scissors example (here <https://groups.google.com/forum/#!topic/ats-lang-users/YcdEzhJdJzs> and here <https://github.com/githwxi/ATS-Postiats-test/blob/master/contrib/hwxi/TEST20/test25.dats>) and I found it very useful for learning how to define predicates in the statics.
I had made an attempt something similar, but using independent datasorts as parameters. For example: datasort catA = | cA_1 | cA_2 | cA_3 datasort catB = | cB_1 | cB_2 | cB_3 datasort sortA = | sA_1 of (catA, catB) | sA_2 | sA_3 // only sortA is used to define types. Eg, abst@ype typeA(sortA) I ran into a few issues. I arrived at a solution, but I thought it could be cleaner. First, I discovered that I wasn't able to define equalities with datasorts. Eg, {sa:sortA | sa == sA_2}. It would typecheck, but the constraints could not be solved. I suppose this makes sense, considering the definition of ==. Does ATS supply a way to determine equalities on datasorts? Is there another feature that would make this unnecessary? As an alternative, I decided to declare a static predicate, as in the rock-paper-scissors example: stacst isCA1 : sortA -> bool // This works, but becomes quite verbose. praxi isCA1_praxi (): [ isCA1(sA_1(cA_1,cB_1)) && isCA1(sA_1(cA_1,cB_2)) && isCA1(sA_1(cA_1,cB_3)) ] void The verbosity isn't an issue in this example, but becomes pretty unmanageable as the relationships get more complex. I would like to say, "for any catB". I tried using universal and existential quantification, but the constraints would not solve. I would like to avoid passing catB explicitly. Is there a way to reduce it to something like this: // The constraints will not solve: praxi isCA1_praxi (): [ cb: catB | isCA1(sA_1(cA_1,cb)) ] void Perhaps I am abusing datasorts -- suggestions for other approaches are welcome. -- 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/2aa9d070-e9bb-461d-974e-c0bb3ecb6ce5%40googlegroups.com.