[bitc-dev] Retrospective: The Issues with Type Classes
Pal-Kristian Engstad
pal_engstad at naughtydog.com
Mon Apr 9 12:59:04 PDT 2012
On 4/9/2012 10:28 AM, Jonathan S. Shapiro wrote:
> Huh? I don't think you are thinking this through. I write a library
> function:
>
> def faux-add(a, b) = { a + b }
>
> which is typed as
>
> Arith 'a => 'a x 'a -> 'a
>
> and I put that in a library. I basically can't compile this function
> at all until I know the instance of Arith, which isn't known until
> dynamic compile time.
You have a choice. You either implement this library function as (poor
C-syntax):
Value *FauxAdd(ArithRepr *tclass, Value *a, Value *b)
{
return tclass->plus_func(a, b);
}
Which obviously is slow unless you perform some global optimizations at
link stage.
The other option is to take your function as a C++ template, a cook-book
for how to implement something. faux-add would not be a value (since it
isn't a function), but it could be instantiated using a specific Arith
instance.
You could probably even do both, but if you did I think people would
like to be able to control it. For instance, you could use 'def
function' and 'def generic' (or any other syntax to distinguish the cases).
PKE
More information about the bitc-dev
mailing list