[Haskell-cafe] A Proposed Law for Foldable?

Daniel Díaz diaz.carrete at gmail.com
Fri Feb 27 23:00:01 UTC 2015


Hi,

Sorry for the slight derail, but I wanted to ask the following doubt: if a 
Foldable type also happens to be a Monoid (say, like Set) does that 
automatically imply that toList mempty = [] ?

On Friday, February 27, 2015 at 8:18:05 PM UTC+1, Gershom B wrote:
>
> On February 27, 2015 at 1:39:10 AM, David Feuer (david... at gmail.com 
> <javascript:>) wrote:
> > I am still struggling to understand why you want this to be a law for
> > Foldable. It seems an interesting property of some Foldable instances,
> > but, unlike Edward Kmett's proposed monoid morphism law, it's not
> > clear to me how you can use this low to prove useful properties of
> > programs. Could you explain?
>
> I think there are a number of purposes for laws. Some can be thought of as 
> “suggested rewrite rules” — and the monoid morphism law is one such, as are 
> many related free approaches.
>
> Note that the monoid morphism law that Edward provides is _not_ a 
> “proposed” law — it is an “almost free theorem” — given a monoid morphism, 
> it follows for free for any Foldable. There is no possible foldable 
> instance that can violate this law, assuming you have an actual monoid 
> morphism.
>
> So Edward may have proposed adding it to the documentation (which makes 
> sense to me) — but it provides absolutely no guidance or constraints as to 
> what an “allowable” instance of Foldable is or is not.
>
> But there are other reasons for laws than just to provide rewrite rules, 
> even though it is often desirable to express laws in such terms. Consider 
> the first Functor law for example — fmap id === id. Now clearly we can use 
> it to go eliminate a bunch of “fmap id” calls in our program, should we 
> have had them. But when would that ever be the case? Instead, the law is 
> important because it _restricts_ the range of allowable instances — and so 
> if you know you have a data type, and you know it has a functor instance, 
> you then know what that functor instance must do, without looking at the 
> source code.
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20150227/590b6d74/attachment.html>


More information about the Haskell-Cafe mailing list