RE: [Haskell] Deferred instance declarations (serialization of existential boxes)

2006-11-10 Thread Simon Peyton-Jones
Misha

I'm happy to tell you that your wish has been granted. I was able to implement 
the change you wanted (you called it deferred instance declarations) as part of 
an overhaul of the type-class machinery in GHC.

I'll send out a more detailed message about this to ghc-users.

Simon

| -Original Message-
| From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
| On Behalf Of Misha Aizatulin
| Sent: 27 September 2006 21:08
| To: GHC Users Mailing List
| Subject: Re: [Haskell] Deferred instance declarations (serialization of 
existential boxes)
|
| Simon Peyton-Jones wrote:
|  Concerning your application
| 
|  |   I am having a box like
|  |  data Box = forall a. Cxt a = Box a
|  |   and want to write a Read instances for it.
| 
|  I don’t see how it helps to defer the Read instance.
|
|   I would defer the instance declaration till the point where I know all
| types that will ever go into the box (for instance in my Main module).
| The Show instance of Box would write the representation of a together
| with it's type (this means Cxt should contain at least Show and
| Typeable). The Read instance will then contain something like
|
| 
|   String aType- lexP
|
|   result - case aType of
| [Int] -
|   (readPrec :: ReadPrec [Int]) = (return . Box)
| SomeOtherType -
|   (readPrec :: ReadPrec SomeOtherType) = (return . Box)
|
| -- more of such cases
|
| _ - error (aType ++  cannot be read inside of Box)
|  
|
|   Not very elegant of course, but it seems to be the only way to Read
| existentials.
|
|  But I think the case is stronger for top-level constraints, and I will bear 
it in mind.
|  If you would like to open a Trac feature request, please do so.
|
|   Ok, I will.
|
| Cheers,
|   Misha
| ___
| Glasgow-haskell-users mailing list
| Glasgow-haskell-users@haskell.org
| http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users


Re: [Haskell] Deferred instance declarations (serialization of existential boxes)

2006-09-27 Thread Misha Aizatulin
Simon Peyton-Jones wrote:
 Concerning your application

 |   I am having a box like
 |  data Box = forall a. Cxt a = Box a
 |   and want to write a Read instances for it.

 I don’t see how it helps to defer the Read instance.

  I would defer the instance declaration till the point where I know all
types that will ever go into the box (for instance in my Main module).
The Show instance of Box would write the representation of a together
with it's type (this means Cxt should contain at least Show and
Typeable). The Read instance will then contain something like


  String aType- lexP

  result - case aType of
[Int] -
  (readPrec :: ReadPrec [Int]) = (return . Box)
SomeOtherType -
  (readPrec :: ReadPrec SomeOtherType) = (return . Box)

-- more of such cases

_ - error (aType ++  cannot be read inside of Box)
 

  Not very elegant of course, but it seems to be the only way to Read
existentials.

 But I think the case is stronger for top-level constraints, and I will bear 
 it in mind.  
 If you would like to open a Trac feature request, please do so.

  Ok, I will.

Cheers,
  Misha
___
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users