<div dir="ltr">In the "text" package, the signature of <a href="http://hackage.haskell.org/package/text-1.2.2.1/docs/Data-Text.html#v:replace">Data.Text.replace</a> always sends me looking into the haddocks:<br><div><br></div><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex;">replace :: Text<span class="Apple-tab-span" style="white-space:pre">       </span>-> Text -> Text<span class="Apple-tab-span" style="white-space:pre">      </span>-> Text<span class="Apple-tab-span" style="white-space:pre">  </span> </blockquote><div><br></div><div>Which argument is the text to replace, which is the replacement and which is the text that should be scanned?</div><div><br></div><div>Imagine a generalized version of replace that 1) works on streams, and 2) allows replacing a sequence of texts (like, say, chapter headers) instead of replacing the same text repeatedly. It could have the following signature:</div><div><br></div><div><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex;">replace' :: Stream (Stream (Of Text) m) m ()<br>            -> Stream (Stream (Of Text) m) m Void<br>            -> Stream (Of Text) m r<br>            -> Stream (Of Text) m r</blockquote><div><br></div><div>Do you find easy to intuit, just by looking at that signature, which is the function of each argument?</div></div></div>