<div dir="ltr"><div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, May 11, 2015 at 7:36 AM, Clinton Mead <span dir="ltr"><<a href="mailto:clintonmead@gmail.com" target="_blank">clintonmead@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The "letSTRef" is what's new. The value it returns can change based on the parts that make up it's function changing.</blockquote></div><br></div><div class="gmail_extra">Certainly that sounds very close to FRP, which propounds the concept of _time-varying_ values.<br></div><div class="gmail_extra"><br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote"><div>I understand this syntax above isn't going to work (I'd have to use
 applicative at least I'd imagine) but my main question is that does 
something like this exist?<br></div></blockquote><br></div>Let's assume you want to adopt the classic effectful approach to FRP. Now when you write:<br><br><div>x <- newSTRef 2</div><div>y <- newSTRef 3</div><div>z <- letSTRef (x + y)<br><br></div><div>you're really working in a pure fragment. Moreover, letSTRef, while attractive, is sort of on the wrong track.<br><br></div><div>Suppose we have two time-varying values mouseX and mouseY. They are both at least applicative values, i.e. f Int for some applicative, possibly even monadic, functor f.<br><br>They are also primitive, like the way a Haskell Int is primitive and involves hardware-wired details, meaning you'll do the actual implement at a lower level than the following:<br><br></div><div>We have a Euclidean distance function dist :: Int -> Int -> Int.<br><br></div><div>To track the distance of the mouse pointer from the origin, we'd write liftA2 dist mouseX mouseY :: f Int, thus deriving another time-varying Int.<br></div><br></div>Does this help clarify?<br><div><br><div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature">-- Kim-Ee</div></div>
</div></div></div></div>