<div dir="ltr">I'm in chapter 4 of Bird's very interesting <i>Thinking Functionally with Haskell </i>and he has a problem at the end of the chapter where he lists these equations<div><br></div><div><font face="monospace">map f . take n    = take n . map f</font></div><div><font face="monospace">map f . reverse   = reverse . map f</font></div><div><font face="monospace">map f . sort      = sort . map f</font></div><div><font face="monospace">map f . filter p  = map fst . filter snd . map (fork (f,p))</font></div><div><font face="monospace">filter (p . g)    = map (invertg) . filter p . map g</font></div><div><font face="monospace">reverse . concat  = concat . reverse . map reverse</font></div><div><font face="monospace">filter p . concat = concat . map (filter p)</font></div><div><br></div><div>adding this caveat for the 3rd equation</div><div><br></div><div><font face="monospace">iff x <= y <=> f x <= f y</font><br></div><div><br></div><div>and this for the 4th equation </div><div><br></div><div><font face="monospace">fork (f,g) x = (f x, g x)</font></div><div><br></div><div>and for the 5th <font face="monospace">invertg</font> satisfies <font face="monospace">invertg . g = id</font> </div><div><br></div><div>My confusion is over the commutative-ness of most of this but only anecdotally. With the particularly dense<br></div><div><br></div><div><font face="monospace">map f . filter p = map fst . filter snd . map (fork (f,p))</font><br></div><div><font face="monospace"><br></font></div><div><font face="monospace">We have</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">> :t (map myF . filter myP)<br></font></div><div><font face="monospace">Integral b => [b] -> [b]</font><br></div><div><font face="monospace">> :t (map fst . filter snd . map (myFork (myF,myP)))<br></font></div><div><font face="monospace">Integral b => [b] -> [b]<br></font></div><div><font face="monospace"><br></font></div><div><font face="arial, sans-serif">Is there anything universal to be drawn from these anecdotal examples of seeming commutativity? My breakdown of the third equation shows the same type definition for both sides. Is this a way to find equality? All in all, Bird doesn't indicate that there are any underlying truths, just "almost" commutativity.</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">LB</font></div><div><font face="monospace"><br></font></div></div>