Benjamin Franksen wrote:
Henning Thielemann wrote:
On Fri, 10 Nov 2006, Benjamin Franksen wrote:
Although one could view this as a bug in the offending module it
makes me somewhat uneasy that one additional import can have such a
drastic effect on the code in a module /even if you don't use
anything from that module/.
It's the same as with instance declarations, isn't it? I don't want
to defend the problems arising with todays anonymous instance
declarations,
Right. However, with instances I can imagine solutions that avoid
naming them, that is, I could imagine to write something like
select instance C T1 T2 ... Tn from module M
or
import M hiding (instance C T1 T2 ... Tn, ....)
Such a feature could prove extremely useful in practice.
Disclaimer: I am almost sure that there is something I have
overlooked that makes such a simple solution impossible, otherwise it
would have been proposed and implemented long ago...
I think the reason you can't do this kind of thing is that within any set of
modules that is compiled at the same time, anywhere in any of these modules,
if you have a type T that's an instance of class C, then all occurrences of
C T must refer to the exact same instance declaration or else things would
get totally messed up when/if the compiler did whole program optimization.
In other words, the instances are actually properties of the type(s)
themselves so allowing different modules to "see" different implementations
of the instances would break the conceptual merging of modules (modulo
renaming) that occurs at compile time.
Regards, Brian.
--
Logic empowers us and Love gives us purpose.
Yet still phantoms restless for eras long past,
congealed in the present in unthought forms,
strive mightily unseen to destroy us.
http://www.metamilk.com
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe