<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:"Yu Gothic";
        panose-1:2 11 4 0 0 0 0 0 0 0;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@Yu Gothic";
        panose-1:2 11 4 0 0 0 0 0 0 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:36.0pt;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style></head><body lang=EN-GB link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal>This would mimic the behaviour of <span style='font-family:"Courier New"'>Control.Monad.when</span> for monoids rather than applicatives.<o:p></o:p></p><p class=MsoNormal><span style='font-family:"Courier New"'>mwhen :: Monoid m => Bool -> m -> m<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>mwhen b a<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'> | b         = a<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'> | otherwise = mempty<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>-- </span>Examples:<span style='font-family:"Courier New"'><o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>when :: Applicative f => Bool -> f () -> f ()<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>when b = getAp . mwhen b . Ap<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>-- mwhen b = getConst . when b . Const<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>guard :: Alternative f => Bool -> f ()<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>guard b = getAlt (mwhen b (pure ()))<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>applyIf :: Bool -> (a -> a) -> (a -> a)<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>applyIf b = appEndo . mwhen b . Endo<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>-- </span>Using<span style='font-family:"Courier New"'> Monoid m => Monoid (a -> m)<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>-- mwhen b f x   = if b then f x   else mempty = mwhen b (f x)<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>-- mwhen b f x y = if b then f x y else mempty = mwhen b (f x y)<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>-- </span>etc<o:p></o:p></p><p class=MsoNormal><span style='font-family:"Courier New"'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>-- mwhen b x <> y = if b then x <> y else y<o:p></o:p></span></p></div></body></html>