As a general rule we let the results of many operations be more defined than the laws require.

Stream fusion runs into this exact same "issue".

This sort of thing is necessary to makes a lot of things like "lazy state" and "lazy writer" possible at all.

-Edward

On Wed, Feb 17, 2016 at 2:25 PM, David Feuer <david.feuer@gmail.com> wrote:

I don't think we should fix this, because it would break code, but I do think we should document it.

Bifunctor law:

bimap id id = id

But actually,

bimap id id _|_ = (_|_, _|_)


_______________________________________________
Libraries mailing list
Libraries@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries