On Tuesday, March 19, 2013 21:50:55 Dan wrote: > On Tuesday, 19 March 2013 at 20:28:09 UTC, Jonathan M Davis wrote: > > The language and standard library are designed around them being > > part of the types themselves. Stuff like AAs won't work if > > those functions > > aren't defined on the types themselves. > > Sorry, I don't understand the last statement.
Lots of stuff uses ==, toHash, etc. That's the way the language is designed. Defining your types without defining those properly just isn't going to work for a _lot_ of stuff. Creating an external function to compare objects or generate hashes or anything like that is just going to cause problems, because only your stuff would use it. The built-in stuff wouldn't, and the standard library wouldn't. For instance, AAs require that opEquals and toHash be defined, and no matter how clever your external functions for comparing objects or generating hashes are, they're not going to work with the built-in AAs. Any type which is going to work with the built-in AAs must define opEquals and toHash. So, if the problem is boilerplate code, mixins can be used for opEquals, opCmp, etc. in order to define those for you, but creating external functions to do those same operations is not how the language was designed and isn't how anything is going to expect types to work. Anything that wants to be comparable, should define ==. Anything that wants to be hashable should define toHash. Etc. Something like equalRecurse ultimately really makes no sense at all. - Jonathan M Davis