I was trying to add some "derive" functionality by representing datatypes, say "a" with some generic datatype, say "rep (a)". However, for a generic function to work on a value of type "rep (a)", we need the type information for the actual values stored in the original value of type "a" (which are copied into the value of type "rep (a)").
It's much like trying to print a heterogeneous list, generically. I need to supply the print function with the actual type of every element. Thus I think I probably need the type info to be a template, so that the user can instantiate it for every datatype they want to be generic. Am I on the right track? Are there other ways of doing it? On Saturday, October 21, 2017 at 4:26:02 PM UTC-4, gmhwxi wrote: > > I don't know how to do it, > > This gets into the domain of meta-programming. > > In general, it is very difficult to do meta-programming in a typeful > manner. Often one tries to write code to generate code that may > contain type-error and then apply typechecking to the generated code. > > On Friday, October 20, 2017 at 5:45:45 PM UTC-4, Steinway Wu wrote: >> >> Hi, >> >> We now have dynamic templates, parameterized by static terms. Is it >> possible to have some simple form of static templates like the followings? >> Or is there any other way to make static functions ad-hoc polymorphic? >> >> datasort typelist = >> | tnil of () >> | tcons of (t@ype, typelist) >> >> #define :: tcons >> >> datatype OneConstructor = One of (int, int, string) >> datatype AnotherConstructor = Another of (int, int, bool) >> >> template stacst Code<type>: typelist >> >> implement Code<OneConstructor> = int :: int :: string :: tnil >> implement Code<AnotherConstructor> = int :: int :: bool :: tnil >> >> >> >> >> >> >> -- 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/94b5a0fb-1f06-4f47-adb3-ab1ccb464ae7%40googlegroups.com.