Monads can be used to track effects in call-by-value languages as well. I was once told that SPJ wanted to implement a call-by-value Haskell if he could have started again :)
In Ur/Web, Adam Chlipala's functional call-by-value language for web-programming, monads are used extensively for signals, transactions, etc. On Thu, Mar 21, 2019 at 9:24 PM Vanessa McHale <vanessa.mch...@iohk.io> wrote: > I'm not sure what the point of an IO monad is in a strict language - > Haskell has good reason to employ them, but I don't think it's really worth > it in other cases (at least, I actually know much about PureScript, but I > don't think ATS needs it). > > I think the way that ATS uses linear types for IO is slightly different - > it uses them to e.g. ensure a handle is closed. Linearity does also have > the curious benefit of making it possible to have lazy/strict evaluation be > the same; you can rule out the example you provide and you can rule out the > bottom type. > > Cheers, > Vanessa McHale > On 3/21/19 12:28 PM, Brandon Barker wrote: > > > > On Thursday, March 21, 2019 at 9:30:40 AM UTC-4, Brandon Barker wrote: >> >> Hi Artyom, >> >> I'm also grappling with the issue of RT in this case as I'd so far only >> thought about it in terms of function calls, but what you and Vanessa say >> helped me to understand the issue. Though I haven't managed to get ATS to >> have the same behavior as OCaml in the "let expression" above, I suspect it >> is possible. The key phrase here seems to be "side-effecting expression", >> and relates to the fact that functions in ATS can perform side effects >> without having any effect type or IO monad ascribed to the value (again, >> iirc). >> > > Well, maybe that isn't the real key - the real key, I now think, is that > ATS doesn't (by default?) model an IO effect. In section 6.9 of > http://ats-lang.sourceforge.net/DOCUMENT/INT2PROGINATS/PDF/main.pdf it is > mentioned that using both linear and dependent types may be used to do > this, though I think the suggestion here is for more than printing to e.g. > STDOUT. > > If anyone has looked at modeling/enforcing an IO-like effect type in ATS, > I'd be interested to see it. > >> >> Perhaps tonight I should try out the same in Idris or PureScript, which >> are not lazily evaluated by default but do use IO, to get a better >> understanding. >> >> On Thursday, March 21, 2019 at 3:17:46 AM UTC-4, Artyom Shalkhakov wrote: >>> >>> Hi Brandon, >>> >>> Admittedly I don't really understand what RT is, but from what I >>> understand, in Haskell the expression like [print "ha"] is basically a >>> command to the top-level interpreter (which is the language runtime) to >>> perform an effect on the console (moreover, it will be evaluated on >>> as-needed basis). Moreover, the ";" is itself another comand, the explicit >>> sequencing command, the meaning of which is "perform the left-hand side >>> effects, then perform the right-hand side effects". Such a command is a >>> value, so it can be passed as a value and reused as many times as is >>> necessary. In ATS, the expression like [print "ha"] evaluates right there >>> to a void/"no value", and the ";" is also NOT a value at all, but rather a >>> "shortcut" syntax to a "let-in-end" form. >>> >>> I like to imagine an interpreter that sits in the Haskell's runtime. >>> Values of IO type are commands to this interpreter. Typical Haskell >>> IO-based programs are building up these commands as they are being >>> evaluated by the runtime. The runtime starts evaluation at the "main" >>> expression defined by the programmer. >>> >>> чт, 21 мар. 2019 г. в 03:45, Brandon Barker <brandon...@gmail.com>: >>> >>>> I'm a little rusty, so can't come up with many good examples. >>>> >>>> Apparently it is possible to do something like this in OCaml: >>>> >>>> implement >>>> main0 () = { >>>> val () = let >>>> val ha = print("ha") >>>> in >>>> (ha; ha) // How to get two ha's here? >>>> end >>>> } >>>> >>>> >>>> After running the program, you would only see one "ha", which violates >>>> RT. >>>> >>>> However, ATS doesn't seem to allow a sequence expression in the "in" >>>> position of a let expression, as this doesn't compile. Admittedly I'm just >>>> trying to see if ATS2 doesn't have RT in this particular case, but it would >>>> also be good to know about the sequence expressions here. >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "ats-lang-users" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to ats-lang-user...@googlegroups.com. >>>> To post to this group, send email to ats-lan...@googlegroups.com. >>>> Visit this group at https://groups.google.com/group/ats-lang-users. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/ats-lang-users/5eba6b86-4146-4ba2-a87f-f8c511d902f0%40googlegroups.com >>>> <https://groups.google.com/d/msgid/ats-lang-users/5eba6b86-4146-4ba2-a87f-f8c511d902f0%40googlegroups.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> >>> >>> -- >>> Cheers, >>> Artyom Shalkhakov >>> >> -- > You received this message because you are subscribed to the Google Groups > "ats-lang-users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to ats-lang-users+unsubscr...@googlegroups.com. > To post to this group, send email to ats-lang-users@googlegroups.com. > Visit this group at https://groups.google.com/group/ats-lang-users. > To view this discussion on the web visit > https://groups.google.com/d/msgid/ats-lang-users/5391973a-4bd4-4238-a007-4dc08d1d9d4d%40googlegroups.com > <https://groups.google.com/d/msgid/ats-lang-users/5391973a-4bd4-4238-a007-4dc08d1d9d4d%40googlegroups.com?utm_medium=email&utm_source=footer> > . > > -- > You received this message because you are subscribed to the Google Groups > "ats-lang-users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to ats-lang-users+unsubscr...@googlegroups.com. > To post to this group, send email to ats-lang-users@googlegroups.com. > Visit this group at https://groups.google.com/group/ats-lang-users. > To view this discussion on the web visit > https://groups.google.com/d/msgid/ats-lang-users/b21006ff-bc7e-d828-1462-4d9c7103feae%40iohk.io > <https://groups.google.com/d/msgid/ats-lang-users/b21006ff-bc7e-d828-1462-4d9c7103feae%40iohk.io?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "ats-lang-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to ats-lang-users+unsubscr...@googlegroups.com. To post to this group, send email to ats-lang-users@googlegroups.com. Visit this group at https://groups.google.com/group/ats-lang-users. To view this discussion on the web visit https://groups.google.com/d/msgid/ats-lang-users/CAPPSPLpb%3Do6BrSy3Jtw56Cd2-K3Fp9pdcnsHoUeKLX3cm28Q2w%40mail.gmail.com.