Re: [Ur] Set / Update values within a structure
The original question smells like a potential XY problem ( http://xyproblem.info/). What's the actual goal? There is probably a functional pattern that solves the problem in a nicer way than the imperative mutation of a callback function. Nitin, if you specifically want to call a mutable Ur/Web callback from JavaScript, it's probably easiest to pass values you need (sources, callback functions, or anything else) through a custom JavaScript FFI function (below called passToJs) that you call from inside main. You can set global JavaScript variables or do whatever else from inside passToJs. val main = src <- source (fn () => return ()); return f <- get src; f ())}/> (* XML that may mutate src *) But I still suspect that this isn't the best solution to whatever the real problem is! Ziv On Fri, Nov 10, 2017 at 17:54 Nitin Suranawrote: > Hi Adam > > I tried to create a sample from what I understand about your suggestion, > but of course I got it wrong. > Following is the code (which doesn't compile), which would demonstrate > what I'm trying to do (look for 4 forward slashes ) > > fun debugMe a = > alert a; > can't read from source n here, because it's defined within > main(), below doesn't compile > fnn <- get n; > fnn() > > > > structure AB = Mymaths.Make(struct >val callback = debugMe >end) > > fun main()= > > n <- source Nil; > lss <- source Nil; > > > let > fun callMe () = > x <- AB.simple "test"; > debug x > > fun anotherCallback() > //iterate over source lss and do something > > in > //Some code to change the callback debugMe to anotherCallback() but what > ?! > set n anotherCallback this doesn't work > > > return > > Sample > callMe()}> > > > end > > Thanks > > > On Fri, Nov 10, 2017 at 1:45 PM, Adam Chlipala > wrote: > >> You can register a callback that, when called, reads another callback out >> of a [source] and calls it. Is that sufficient? >> On 11/10/2017 04:19 PM, Nitin Surana wrote: >> >> Hi Adam >> >> Thanks for responding. Is there any alternative to change the callback ? >> I want to trigger a urweb function defined within `let` block upon a >> javascript event. >> Since, the function is within `let` block (because it needs access to >> certain variables within the parent function), I'm unable to use execF(...) >> from javascript. >> >> Also, is `ref` not supported in urweb ? >> >> Thanks >> >> On Fri, Nov 10, 2017 at 4:48 AM, Adam Chlipala >> wrote: >> >>> On 11/09/2017 10:42 PM, Harshita Kasera wrote: >>> >>> What I ultimately want to achieve is to be able to change the callback >>> function *debugMe* at a later point of time. Is it possible to set or >>> update values within a structure at a later point of time? >>> >>> >>> No, module (structure) fields can't be modified at runtime in Ur/Web or >>> ML. Therefore, the module system is not the right tool for runtime >>> rewriting of callbacks. >>> >> >> >> ___ >> Ur mailing list >> Ur@impredicative.com >> > >> https://urldefense.proofpoint.com/v2/url?u=http-3A__www.impredicative.com_cgi-2Dbin_mailman_listinfo_ur=DwIGaQ=clK7kQUTWtAVEOVIgvi0NU5BOUHhpN0H8p7CSfnc_gI=fRXDP9LYNqdFgci7lxN2fw=4BPlw-ffwmldYJ_nUfPoCMcCEtXDUqFj73lIc-B35lQ=SdXCyX5EL_W3lxWpCwUlkH65djIEQvhG4MnsKPjypKE= >> >> > > > -- > Regards > Nitin Surana > MS Computer Science > 323-690-6529 > > ___ > Ur mailing list > Ur@impredicative.com > http://www.impredicative.com/cgi-bin/mailman/listinfo/ur > ___ Ur mailing list Ur@impredicative.com http://www.impredicative.com/cgi-bin/mailman/listinfo/ur
Re: [Ur] Set / Update values within a structure
Hi Adam I tried to create a sample from what I understand about your suggestion, but of course I got it wrong. Following is the code (which doesn't compile), which would demonstrate what I'm trying to do (look for 4 forward slashes ) fun debugMe a = alert a; can't read from source n here, because it's defined within main(), below doesn't compile fnn <- get n; fnn() structure AB = Mymaths.Make(struct val callback = debugMe end) fun main()= n <- source Nil; lss <- source Nil; let fun callMe () = x <- AB.simple "test"; debug x fun anotherCallback() //iterate over source lss and do something in //Some code to change the callback debugMe to anotherCallback() but what ?! set n anotherCallback this doesn't work return Sample callMe()}> end Thanks On Fri, Nov 10, 2017 at 1:45 PM, Adam Chlipalawrote: > You can register a callback that, when called, reads another callback out > of a [source] and calls it. Is that sufficient? > On 11/10/2017 04:19 PM, Nitin Surana wrote: > > Hi Adam > > Thanks for responding. Is there any alternative to change the callback ? I > want to trigger a urweb function defined within `let` block upon a > javascript event. > Since, the function is within `let` block (because it needs access to > certain variables within the parent function), I'm unable to use execF(...) > from javascript. > > Also, is `ref` not supported in urweb ? > > Thanks > > On Fri, Nov 10, 2017 at 4:48 AM, Adam Chlipala > wrote: > >> On 11/09/2017 10:42 PM, Harshita Kasera wrote: >> >> What I ultimately want to achieve is to be able to change the callback >> function *debugMe* at a later point of time. Is it possible to set or >> update values within a structure at a later point of time? >> >> >> No, module (structure) fields can't be modified at runtime in Ur/Web or >> ML. Therefore, the module system is not the right tool for runtime >> rewriting of callbacks. >> > > > ___ > Ur mailing list > Ur@impredicative.com > https://urldefense.proofpoint.com/v2/url?u=http-3A__www. > impredicative.com_cgi-2Dbin_mailman_listinfo_ur=DwIGaQ= > clK7kQUTWtAVEOVIgvi0NU5BOUHhpN0H8p7CSfnc_gI=fRXDP9LYNqdFgci7lxN2fw= > 4BPlw-ffwmldYJ_nUfPoCMcCEtXDUqFj73lIc-B35lQ=SdXCyX5EL_ > W3lxWpCwUlkH65djIEQvhG4MnsKPjypKE= > > -- Regards Nitin Surana MS Computer Science 323-690-6529 ___ Ur mailing list Ur@impredicative.com http://www.impredicative.com/cgi-bin/mailman/listinfo/ur
Re: [Ur] Set / Update values within a structure
You can register a callback that, when called, reads another callback out of a [source] and calls it. Is that sufficient? On 11/10/2017 04:19 PM, Nitin Surana wrote: Hi Adam Thanks for responding. Is there any alternative to change the callback ? I want to trigger a urweb function defined within `let` block upon a javascript event. Since, the function is within `let` block (because it needs access to certain variables within the parent function), I'm unable to use execF(...) from javascript. Also, is `ref` not supported in urweb ? Thanks On Fri, Nov 10, 2017 at 4:48 AM, Adam Chlipala> wrote: On 11/09/2017 10:42 PM, Harshita Kasera wrote: What I ultimately want to achieve is to be able to change the callback function /debugMe/ at a later point of time. Is it possible to set or update values within a structure at a later point of time? No, module (structure) fields can't be modified at runtime in Ur/Web or ML. Therefore, the module system is not the right tool for runtime rewriting of callbacks. ___ Ur mailing list Ur@impredicative.com http://www.impredicative.com/cgi-bin/mailman/listinfo/ur
Re: [Ur] Set / Update values within a structure
Here is the associated stackoverflow question : https://stackoverflow.com/questions/47230123/how-to-associate-a-getter-setter-with-a-sml-structure/47230248#47230248 On Fri, Nov 10, 2017 at 1:19 PM, Nitin Suranawrote: > Hi Adam > > Thanks for responding. Is there any alternative to change the callback ? I > want to trigger a urweb function defined within `let` block upon a > javascript event. > Since, the function is within `let` block (because it needs access to > certain variables within the parent function), I'm unable to use execF(...) > from javascript. > > Also, is `ref` not supported in urweb ? > > Thanks > > On Fri, Nov 10, 2017 at 4:48 AM, Adam Chlipala > wrote: > >> On 11/09/2017 10:42 PM, Harshita Kasera wrote: >> >> What I ultimately want to achieve is to be able to change the callback >> function *debugMe* at a later point of time. Is it possible to set or >> update values within a structure at a later point of time? >> >> >> No, module (structure) fields can't be modified at runtime in Ur/Web or >> ML. Therefore, the module system is not the right tool for runtime >> rewriting of callbacks. >> >> ___ >> Ur mailing list >> Ur@impredicative.com >> https://urldefense.proofpoint.com/v2/url?u=http-3A__www.impr >> edicative.com_cgi-2Dbin_mailman_listinfo_ur=DwIGaQ=clK7k >> QUTWtAVEOVIgvi0NU5BOUHhpN0H8p7CSfnc_gI=fRXDP9LYNqdFgci7lxN >> 2fw=X8Ib40TF-qUD7bakiyGU9t4RAhizaUVZMC4hWQyT48Y= >> rYoIQIsMrBs_ryXBiGe6ZvYAeF7m5GICNRlSuX__A7w= >> >> > > > -- > Regards > Nitin Surana > MS Computer Science > 323-690-6529 <(323)%20690-6529> > > -- Regards Nitin Surana MS Computer Science 323-690-6529 ___ Ur mailing list Ur@impredicative.com http://www.impredicative.com/cgi-bin/mailman/listinfo/ur
Re: [Ur] Set / Update values within a structure
Hi Adam Thanks for responding. Is there any alternative to change the callback ? I want to trigger a urweb function defined within `let` block upon a javascript event. Since, the function is within `let` block (because it needs access to certain variables within the parent function), I'm unable to use execF(...) from javascript. Also, is `ref` not supported in urweb ? Thanks On Fri, Nov 10, 2017 at 4:48 AM, Adam Chlipalawrote: > On 11/09/2017 10:42 PM, Harshita Kasera wrote: > > What I ultimately want to achieve is to be able to change the callback > function *debugMe* at a later point of time. Is it possible to set or > update values within a structure at a later point of time? > > > No, module (structure) fields can't be modified at runtime in Ur/Web or > ML. Therefore, the module system is not the right tool for runtime > rewriting of callbacks. > > ___ > Ur mailing list > Ur@impredicative.com > https://urldefense.proofpoint.com/v2/url?u=http-3A__www. > impredicative.com_cgi-2Dbin_mailman_listinfo_ur=DwIGaQ= > clK7kQUTWtAVEOVIgvi0NU5BOUHhpN0H8p7CSfnc_gI=fRXDP9LYNqdFgci7lxN2fw= > X8Ib40TF-qUD7bakiyGU9t4RAhizaUVZMC4hWQyT48Y=rYoIQIsMrBs_ > ryXBiGe6ZvYAeF7m5GICNRlSuX__A7w= > > -- Regards Nitin Surana MS Computer Science 323-690-6529 ___ Ur mailing list Ur@impredicative.com http://www.impredicative.com/cgi-bin/mailman/listinfo/ur
Re: [Ur] Set / Update values within a structure
On 11/09/2017 10:42 PM, Harshita Kasera wrote: What I ultimately want to achieve is to be able to change the callback function /debugMe/ at a later point of time. Is it possible to set or update values within a structure at a later point of time? No, module (structure) fields can't be modified at runtime in Ur/Web or ML. Therefore, the module system is not the right tool for runtime rewriting of callbacks. ___ Ur mailing list Ur@impredicative.com http://www.impredicative.com/cgi-bin/mailman/listinfo/ur