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.

Reply via email to