Re: [Ur] Set / Update values within a structure

2017-11-11 Thread Ziv Scully
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 Surana  wrote:

> 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

2017-11-10 Thread Nitin Surana
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


Re: [Ur] Set / Update values within a structure

2017-11-10 Thread Adam Chlipala
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

2017-11-10 Thread Nitin Surana
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 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.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

2017-11-10 Thread Nitin Surana
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=
> 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

2017-11-10 Thread Adam Chlipala

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