'deriving Tree (Eq,Ord)'
Robert Dockins
robdockins at fastmail.fm
Tue Apr 4 13:13:32 EDT 2006
On Apr 4, 2006, at 12:46 PM, Twan van Laarhoven wrote:
> Benjamin Franksen wrote:
>> However, it would help programmers a lot, specialy library users.
>> And it would lift some of the burden that is currently on the
>> library writer to never forget to derive all possibly useful
>> instances for public data types.
>
> If you allow 'deriving' in other modules it can violate the
> 'privacy' of modules. For example (if these instances were not
> declared):
>
> > deriving Data.Map.Map (Show)
>
> Now I can look at what map nodes look like.
>
> > deriving Data.Map.Map (Data)
>
> Now I can even mess with the internal structure, violating invariants.
The obvious solution is to allow out-of-defining-module deriving only
for data types where all constructors are exported. Presumably, if
someone explicitly hid (at least some of) the constructors of a data
type, they did it for a reason and we can hope that they carefully
considered the external interface of that type (including instances).
Rob Dockins
Speak softly and drive a Sherman tank.
Laugh hard; it's a long way to the bank.
-- TMBG
More information about the Haskell-prime
mailing list