4 Jan 2012 02:28
Re: Traversable instance for ((,) o) ?
Edward Kmett <ekmett <at> gmail.com>
2012-01-04 01:28:54 GMT
2012-01-04 01:28:54 GMT
Bitraversable and Bifoldable are already in the bifunctors package. I needed them. ;) Sent from my iPad On Jan 3, 2012, at 6:30 PM, Conor McBride <conor <at> strictlypositive.org> wrote: > > On 3 Jan 2012, at 23:12, Conal Elliott wrote: > >> I wanted a Traversable instance for pairing, so I defined one: >> > instance Traversable ((,) o) where >> > sequenceA (o,fa) = (o,) <$> fa > > That looks right. Of course, we should really have a BiTraversable > class of which (,) is an instance. > >> >> However, Foldable is a superclass of Traversable, so I get an error message: >> >> Could not deduce (Foldable ((,) o)) from the context () >> arising from the superclasses of an instance declaration >> >> The best I've thought of is the following: >> >> > instance Foldable ((,) o) where >> > fold (_,m) = m > > The best (upto efficiency considerations) is always > > instance Foldable ((,) o) where > foldMap = foldMapDefault > > which amounts to what you chose. > > SHE makes this a default superclass instance. > >> However, I don't like how it discards information. > > But these folds always do discard information, discarding the shape > information and accumulating over the contents. For ((,) o), seen as > a functor, the first component is shape information and the second is > the content. > >> Some questions: >> >> * Why is Foldable a superclass of Traversable? > > Because the constant-monoid Applicative makes every Traversable > Foldable in a uniform way. > >> * Is there a good choice of a Foldable instance of ((,) o)? > > Yes, the one you chose. > >> * Are there any other problems with the Traversable instance above (besides foldability)? > > Nope. It's the Traversable instance which picks out exactly the > contents that correspond to the elements abstracted by the Functor. > > All the best > > Conor > > > _______________________________________________ > Libraries mailing list > Libraries <at> haskell.org > http://www.haskell.org/mailman/listinfo/libraries
RSS Feed