<div>In the <span style=""><span style=""><span class="font" style="font-family:menlo, consolas, "courier new", monospace, sans-serif">Data.Monoid</span></span></span> library there is a monoid type instance for <span style=""><span style=""><span class="font" style="font-family:menlo, consolas, "courier new", monospace, sans-serif">Endo a</span></span></span> that is described in the following manner:<br></div><div><br></div><blockquote><div><span style="color: rgb(17, 17, 17); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: 0.024px; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(254, 254, 254); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; float: none; display: inline !important;"><span style=""><span style=""><span class="font" style="font-family:"PT Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Cantarell, "Helvetica Neue", sans-serif"><span style=""><span style=""><span class="size" style="font-size:14px">The monoid of endomorphisms under composition.</span></span></span></span></span></span></span><br></div></blockquote><div><br></div><div class="protonmail_signature_block"><div class="protonmail_signature_block-user protonmail_signature_block-empty"></div></div><div>I understand how it is a monoid of <i>endofunctions, </i>but am unclear on how it is a monoid of <i>endomorphisms</i>. <br></div><div>In the pattern: "forms a monoid of X under Y", X refers to the set and Y to the associative binary operation.<br></div><div>So it seems that X in this case is the set of endofunctions. However, it might be possible that the intention was <br></div><div>to state that <i>function composition</i> is an endomorphism of the set of endofunctions (<span style=""><span class="font" style="font-family:menlo, consolas, "courier new", monospace, sans-serif">Endo a</span></span>). However even <br></div><div>this statement seems difficult to prove in Haskell:<br></div><div><br></div><div><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;">opening :: String -> String</span><br></div><div><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;">opening = ("Hello, " ++)</span><br></div><div></div><div><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;">closing :: String -> String</span><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;"><br></span></div><div><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;">closing = (++ "!")</span><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;"><br></span></div><div><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;"><br></span></div><div><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;">eo = Endo opening</span><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;"><br></span></div><div><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;">ec = Endo closing</span><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;"><br></span></div><div><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;"><br></span></div><div><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;">appEndo (Endo $ opening <> closing) "Haskell"</span><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;"><br></span></div><div><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;">-- "Hello, HaskellHaskell!"</span><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;"><br></span></div><div><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;"><br></span></div><div><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;">(appEndo eo <> appEndo ec) "Haskell"</span><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;"><br></span></div><div><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;">-- "Hello, HaskellHaskell!"</span><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;"><br></span></div><div><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;"><br></span></div><div><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;">appEndo  (eo <> ec) "Haskell</span><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;"><br></span></div><div><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;">-- "Hello, Haskell!"</span><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;"><br></span></div><div><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;"><br></span></div><div><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;">(opening <> closing) "Haskell"</span><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;"><br></span></div><div><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;">-- "Hello, HaskellHaskell!"</span><br></div><div><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;"></span><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;"><br></span></div><div><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;">(opening . closing) "Haskell"</span><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;"><br></span></div><div><span class="font" style="font-family: menlo, consolas, courier new, monospace, sans-serif;">-- "Hello, Haskell!"</span><br></div><div><br></div><div>I believe the reason for this behavior is that the fallback for <span style=""><span class="font" style="font-family:menlo, consolas, "courier new", monospace, sans-serif">mappend</span></span> for the general endofunction with type <span style=""><span class="font" style="font-family:menlo, consolas, "courier new", monospace, sans-serif">a -> b</span></span><br></div><div><span style=""><span class="font" style="font-family:arial, sans-serif">is found in the Base library as:</span></span><br></div><div><br></div><div>-- @since 4.9.0.0<br></div><div>instance Semigroup b => Semigroup (a -> b) where<br></div><div>        f <> g = \x -> f x <> g x<br></div><div><br></div><div><br></div>