[Haskell-cafe] Haskell-Cafe Digest, Vol 106, Issue 38

Richard O'Keefe ok at cs.otago.ac.nz
Wed Jun 27 06:25:20 CEST 2012

On 27/06/2012, at 3:18 PM, John Lato wrote:

> On Wed, Jun 27, 2012 at 9:15 AM, Richard O'Keefe <ok at cs.otago.ac.nz> wrote:
>> On 27/06/2012, at 12:51 PM, John Lato wrote:
>>> data Tree a = Leaf a | Branch (Tree a) ( Tree a)
>>>  deriving (Foldable, Show)
>> While I am familiar with deriving (Show),
>> I am not familiar with deriving (Foldable),
>> which looks rather useful.
>> http://www.haskell.org/ghc/docs/7.4.2/html/users_guide/deriving.html
>> just says "With -XDeriveFoldable, you can derive instances of the
>> class Foldable, defined in Data.Foldable." but it provides no details.
>> Would you care to explain more about deriving (Foldable)?
> There's not much to explain, DeriveFoldable basically does just that;
> automatically provide an instance of the Foldable class for a data
> type.

That was sufficiently obvious, yes.
The question remains, ***WHAT*** instance?

>  I think the original proposal for DeriveFoldable was from Twan
> van Laarhoven, http://www.mail-archive.com/haskell-prime@haskell.org/msg02116.html,

which goes into a great deal of detail about what deriving (Functor)
does, but none whatsoever about what deriving (Foldable) does.  Even
for Functor, another 3 or 4 nontrivial examples would be nice.

> and there's a little bit of history on GHC's trac,
> http://hackage.haskell.org/trac/ghc/ticket/2953.  The current
> implementation probably hasn't changed much since Simon PJ's original
> patch, although there's probably substantial overlap with ghc's
> generics these days.

That trac entry contains one sentence that seems to still apply:

  "What is missing is a section in the user manual describing the changes."

It refers to section 8.5, which is now 7.5, and there is still no
adequate documentation there.
> As for the Foldable class itself, the docs at
> http://www.haskell.org/ghc/docs/latest/html/libraries/base/Data-Foldable.html
> are pretty good. 

Yes, Foldable *is* documented.
However, that page says nothing whatever about deriving (Foldable).

More information about the Haskell-Cafe mailing list