<div dir="ltr">Hi Petr.<div><br></div><div>As Tom hinted, Stream is isomorphic to function-from-Nat (Peano/lazy natural numbers), being the memoized (trie) representation of such functions. The Stream Monad instance corresponds to the function-from-a Monad ("reader") instance, so all such trie Monad instances are useful wherever we want to work monadically with functions but want memoization.</div><div><br></div><div>I like Olaf's example use as well: 'fmap not . join' constructs a stream of binary representations of numbers in [0,1] that disagrees with every element of any given enumeration of such numbers. A very terse demonstration of a profoundly important mathematical discovery.</div><div><br></div><div>- Conal<div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jul 12, 2016 at 4:10 AM, Petr Pudlák <span dir="ltr"><<a href="mailto:petr.mvd@gmail.com" target="_blank">petr.mvd@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><p dir="ltr">Indeed, the question is not wherever it's a monad or not, just to what extent is the monad useful.</p>
<br><div class="gmail_quote"><div dir="ltr">Dne po 11. 7. 2016 22:08 uživatel Olaf Klinke <<a href="mailto:olf@aatal-apotheke.de" target="_blank">olf@aatal-apotheke.de</a>> napsal:<br></div><span class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">As someone else on this list whose name I don't recall put it, there is no<br>
choice on whether to make Stream a monad or not. It simply _is_ a monad.<br>
Anyone with some CS education hearing 'diagonal of inifinite list of<br>
infinite lists' should immediately think of Georg Cantor.<br>
<br>
import Data.Stream<br>
import Data.Ratio<br>
<br>
type Real = Stream Rational<br>
-- approximate a real number by an ascending stream<br>
-- of lower bounds.<br>
<br>
supremum :: Stream Real -> Real<br>
supremum  = join<br>
-- If a stream of reals is index-wise ascending,<br>
-- the monad instance for Stream computes its supremum.<br>
-- Use this e.g. to compute any mathematical quantity<br>
-- defined as a supremum.<br>
<br>
-- Olaf<br>
</blockquote></span></div>
<br>_______________________________________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
Only members subscribed via the mailman list are allowed to post.<br></blockquote></div><br></div></div></div>