Propsal: NoDatatypeContexts

José Pedro Magalhães jpm at cs.uu.nl
Tue Jul 20 04:56:56 EDT 2010


Hello all,

> DrIFT cannot derive the Read (or our deserialization) instance without
> the "Ord symbol =>" context.

That's because DrIFT is simply copying this context to the Read instance,
right? Perhaps the best way to do it would be to copy the context of the
Read instance for Set and use that instead (though I know that DrIFT does
not have access to that).

> It would be interesting to know (or if at all) i.e. uniplate (proposed
> for the haskell platform) or other generic stuff can handle this case
> (as alternative to DrIFT).

>From what I know, most generic programming approaches simply ignore
constrained datatypes. I thought about them in the design of a generic
programming library for replacing the Haskell deriving mechanism [1]. I
think it's easy to support them, but actually we don't support them, since
we also think they are not used very often and should disappear.


Cheers,
Pedro

[1] José Pedro Magalhães, Atze Dijkstra, Johan Jeuring, and Andres Löh. A
generic deriving mechanism for Haskell.
http://dreixel.net/research/pdf/gdmh_draft.pdf (see Section 7.1 for the
discussion on constrained datatypes)


On Tue, Jul 20, 2010 at 10:46, Christian Maeder <Christian.Maeder at dfki.de>wrote:

> Christian Maeder schrieb:
> > Ian Lynagh schrieb:
> [...]
> >>
> http://hackage.haskell.org/trac/haskell-prime/wiki/NoDatatypeContexts
> >
> > I'm for this proposal, although I've got an example where I need this
> > context, namely for DrIFT to derive a proper context for instances.
> >
> > DrIFT doesn't know that the Read instance for Data.Set.Set relies on Ord
> > of the elements. For
> >
> > data Ord symbol => ExtSign sign symbol = ExtSign
> >   { plainSign :: sign
> >   , nonImportedSymbols :: Set.Set symbol
> >   } deriving Show
> >
> > DrIFT cannot derive the Read (or our deserialization) instance without
> > the "Ord symbol =>" context.
>
> It would be interesting to know (or if at all) i.e. uniplate (proposed
> for the haskell platform) or other generic stuff can handle this case
> (as alternative to DrIFT).
>
> A short look at http://www.haskell.org/haskellwiki/Uniplate did not
> immediate help on this matter.
>
> Template Haskell may be possible, too.
>
> Can some expert for generic programming elaborate on this? (I once had a
> good paper comparing the various approaches, but I can no longer find it.)
>
> Pointers are welcome.
>
> Cheers Christian
>
> >
> > However, ghc is able by "deriving (Show, Read)" to see
> >
> > instance (Ord symbol, Read sign, Read symbol) =>
> >          Read (ExtSign sign symbol)
> >
> > without the context.
> >
> > Cheers Christian
> _______________________________________________
> Haskell-prime mailing list
> Haskell-prime at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-prime
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-prime/attachments/20100720/a9abd144/attachment.html


More information about the Haskell-prime mailing list