
On 27/06/2012, at 3:18 PM, John Lato wrote:
On Wed, Jun 27, 2012 at 9:15 AM, Richard O'Keefe
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.htm... are pretty good.
Yes, Foldable *is* documented. However, that page says nothing whatever about deriving (Foldable).