In article <[EMAIL PROTECTED]>, Bulat Ziganshin <[EMAIL PROTECTED]> wrote:
> it's unserious :) overloading of unboxed types must be resolved at > compile time, as in C++ templates. Why can't (->) that's been specialised to #4 -> #4 -> * just generate a function that takes an anonymous 4-byte quantity and returns an anonymous 4-byte quantity? > Haskell polymorhism, based on using > of type classes, oriented to run-time resolving of polymorphic usage, > although SPECIALIZE/INLINE/RULES pragmas can optimize code, the > program must remain correct without these pragmas and therefore > overloading is limited to boxed types. aside of different sizes, boxed > values carry dictionaries used to run-time resolving of overloaded > functions. where unboxed value must hide this dictionary? :) I thought functions receive dictionaries, rather than dictionaries being stored inside values? For instance: class C (x :: #4) where ... foo :: (C x) => x -> Bool foo x = ... might be generate something like this: HsBool foo (CDict dict,int32 x) { ... } > but i'm totally agree that we must have C++-like compile-time > overloading in order to create fast programs -- Ashley Yakeley, Seattle WA _______________________________________________ Haskell mailing list Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell