| 1.- In the version 1.2 there is a restriction that a C-T instance declaration
|      may only appear either in the module where C or T are declared, but in
|      the version 1.3 this restriction does not appear. What is the reason for 
|      the change? Why is the restriction in 1.2 at all?

We were conservative in 1.2 and less conservative in 1.4, that's all.
The point is that we want to ensure that there's only one C-T instance for a
given type.   The 1.2 restriction made that a bit easier to check, but
it was Really Tiresome in practice.  So we lifted it.


| 2.- In the declaration of the Eq class, (/=) has a default declaration, 
|      but (==) has not. Why?
|      If (==) has also a default declaration (ie: not (x/=y)) you could choose
|      whether to define (==) or (/=) or both when declaring an instance.
|      The same applies to Ord and (<=).

I don't know.  It would be sensible for it to have one.

| 3.- The 1.2 class Text was separated in the 1.3 Show and Read, and then, 1.2
|      programs that uses Text are not 1.3 compatibles, and make them work      
|      requires a lot of changes. But if one adds the following declarations:
|        class (Show a, Read a) => Text a
|      and the appropriate instance declarations for predefined types, the only
|      changes needed are in the user-defined instance declarations for Text, 
|      thus reducing the amount of work to be done.
|      Can these things be added to the PreludeText module? 
|      Are they worth considering?

The reason for separating them
was that people mostly want "Show", but they were getting a whole
wad of code for "Read" linked in because the compiler couldn't tell that it
wasn't going to be called. 

I think it's worth the pain of making the changes.  Or, if you want,
there's nothing to stop you adding the class decl you describe.  It does not
have to be in the prelude.

Simon



Reply via email to