[Haskell-cafe] Deriving Show for non-regular data types

adam vogt vogt.adam at gmail.com
Thu Mar 12 03:25:18 UTC 2015

Hi Mark,

This combination seems to work:

instance (Show a, Show1 d) => Show (d a) where
    showsPrec = showsPrec1

deriving instance (Show (d a), Show1 d)
  => Show (SimpleCatDeque d a)

But it needs overlapping instances. I don't see another way to express

 (Show (d a), Show (d (d a)), Show (d (d (d a))), ... )

in a way that ghc will lazily evaluate the ...


On Wed, Mar 11, 2015 at 1:59 AM, David Feuer <david.feuer at gmail.com> wrote:

> You may want to look at the Show1 class, which may or may not help you
> any. You also may or may not find Ralf Hinze's paper "Numerical
> Representations as Higher-Order Nested Datatypes" helpful. Nested types can
> be extremely efficient in certain situations, and it's not *usually* too
> terribly hard to read code that uses them, but writing it is an entirely
> different story. In some cases, you can get good results using GADTs to
> enforce your shape invariants, and they tend to be a lot easier to work
> with.
> On Mar 11, 2015 1:45 AM, "Mark Laws" <mdl at 60hz.org> wrote:
>> Hi,
>> As part of studying Okasaki's PFDS book, I wanted to add Show support
>> for each of the data structures, and some have proven to be challenging,
>> as some of the types are non-regular and automatic derivation of Show
>> doesn't work.  I've been able to add some code that introduces a
>> supplementary type class that serves as a way to pass "proof" that the
>> wrapping data type supports traversal for Show-ability, but the solution
>> seems unsatisfactory.  I would greatly appreciate any suggestions for
>> improvements.  I've attached the code; the relevant bits are in
>> BankersDeque.hs, Example.hs, NestedShowable.hs, and
>> SimpleCatenableDeque.hs.  The same code is available here:
>> https://gist.github.com/drvink/30fb2a2b257fc99af281
>> Thanks,
>> Mark Laws
>> --
>> |v\ /\ |\ |< |_ /\ \^| //
>> _______________________________________________
>> Haskell-Cafe mailing list
>> Haskell-Cafe at haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20150311/a3ac7086/attachment.html>

More information about the Haskell-Cafe mailing list