<div dir="ltr">You seem rather confused as to what a monad is. It is not about "everything is in an IORef", for one. (IO is not the only Monad, nor are the others pretending to be IO.)</div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jan 12, 2018 at 11:38 AM, Benjamin Redelings <span dir="ltr"><<a href="mailto:benjamin.redelings@gmail.com" target="_blank">benjamin.redelings@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Oleg,<span class=""><br>
<br>
<br>
On 01/11/2018 09:17 AM, Oleg Grenrus wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Benjamin<br>
<br>
Let's see what you ask for, you have *new* syntax for types:<br>
<br>
     a[N] and a[D]<br>
<br>
what are a[N][N] or a[N][D] or a[N][D] or a[D][D]?<br>
<br>
Aren't they a[N], a[N], a[N] and a[D] respectively?<br>
That's what monads are about!<br>
</blockquote></span>
Just to be clear, I'm not using [N] as an operator on types, but as part of the type. So a type could be something like the pair (Int,D) or (Int,N).  In that context a[N][N] is not part of the system.<span class=""><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
So<br>
<br>
    a[N] ~ Distr a<br>
    a[D] ~ Identity a ~ a<br>
<br>
No need to complicate type-system! You just to not be afraid of monads!<br>
<br>
Monads aren't sequencing, they are computational context.<br>
<br>
I guess, you just want more natural term-level syntax.<br>
<br>
You can use ApplicativeDo [1] (in GHC-8.0+), so e.g.<br>
<br>
     do x <- normal 0 1<br>
        y <- normal 0 1<br>
        return (f x y)<br>
<br>
will be transformed into<br>
<br>
     liftA2 f (normal 0 1) (normal 0 1)<br>
<br>
That's almost like<br>
<br>
     f (normal 0 1) (normal 0 1)<br>
<br>
if you have proper syntax highlighting ;)<br>
<br>
Note: various term syntax extensions been proposed.<br>
E.g. idiom brackets in the "Applicative programming with effects" [2]:<br>
<br>
    (| f (normal 0 1) (normal 0 1) |)<br>
<br>
to mean<br>
<br>
    pure f <*> normal 0 1 <*> normal 0 1<br>
<br>
which is equivalent to above liftA2 expression. If you like that, you<br>
can check<br>
"the Strathclyde Haskell Enhancement", it supports idiom brackets.<br>
</blockquote></span>
In my other message I posted an example that doesn't fit this very well:<br>
<br>
do { x <- f x } does not work, where as let x = f x does work. Basically I'm trying to avoid monads because I want to use the full features of the Haskell language, instead of programming in an embedded language.  In that context "more natural" term-level syntax is not sufficient.<br>
<br>
Also, it seems possible that everything in Haskell COULD be written in a monad.  We could eliminate recursive let bindings, and tell people to create a giant state machine which they use by reading and writing IORefs. But then you also eliminate some of the point of using Haskell and may as well go write in C or something.  So it seems to me that just because you CAN use a monad doesn't mean you SHOULD use a monad, and the question is "when is a monad better than something else?"<br>
<br>
Does that make sense?  Am I missing something?<div class="HOEnZb"><div class="h5"><br>
<br>
-BenRI<br>
______________________________<wbr>_________________<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-bi<wbr>n/mailman/listinfo/haskell-caf<wbr>e</a><br>
Only members subscribed via the mailman list are allowed to post.</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>brandon s allbery kf8nh                               sine nomine associates</div><div><a href="mailto:allbery.b@gmail.com" target="_blank">allbery.b@gmail.com</a>                                  <a href="mailto:ballbery@sinenomine.net" target="_blank">ballbery@sinenomine.net</a></div><div>unix, openafs, kerberos, infrastructure, xmonad        <a href="http://sinenomine.net" target="_blank">http://sinenomine.net</a></div></div></div>
</div>