[Ur] About clientOnly

Aistis Raulinaitis sheganinans at gmail.com
Mon May 22 00:05:42 EDT 2017


Hmm, remodeling it to be similar to the examples you gave doesn't seem to
help. I noticed that none of the types in those examples take type
parameters, maybe that has something to do with the difficulties I'm facing?

On Sun, May 21, 2017 at 8:31 PM, Aistis Raulinaitis <sheganinans at gmail.com>
wrote:

> Thanks!
>
> On Sun, May 21, 2017 at 8:27 PM, Artyom Shalkhakov <
> artyom.shalkhakov at gmail.com> wrote:
>
>> 2017-05-22 9:19 GMT+06:00 Aistis Raulinaitis <sheganinans at gmail.com>:
>> > Hmm, that makes sense. Do you have an example of FFI with an abstract
>> type?
>> > I tried to encapsulate the map type with a con, but obviously that does
>> not
>> > work..
>> >
>>
>> Sure, here are two examples:
>>
>> https://github.com/bbarenblat/urweb-regex (in particular, take a look
>> at regex__FFI.urs and the two types [substring_t] and
>> [substring_list_t])
>> https://github.com/ashalkhakov/urweb-storage (shameless plug; in
>> particular, take a look at storage__FFI.urs and the type [storage])
>>
>> > On Sun, May 21, 2017 at 8:10 PM, Artyom Shalkhakov
>> > <artyom.shalkhakov at gmail.com> wrote:
>> >>
>> >> 2017-05-22 6:22 GMT+06:00 Aistis Raulinaitis <sheganinans at gmail.com>:
>> >> > So I am working with the JS FFI, however it seems that the clientOnly
>> >> > directive is being ignored.
>> >> >
>> >> > Here is the example code:
>> >> >
>> >> > ~~~
>> >> > main.urp:
>> >> > ~~~
>> >> >
>> >> > ffi js_map
>> >> > jsFunc Js_map.new_map=new_map
>> >> > jsFunc Js_map.new_map_with=new_map_with
>> >> > clientOnly Js_map.new_map
>> >> > clientOnly Js_map.new_map_with
>> >> > benignEffectful Js_map.new_map
>> >> > benignEffectful Js_map.new_map_with
>> >> > jsFile js_map.js
>> >> >
>> >> > main
>> >> >
>> >> >
>> >> > ~~~
>> >> > main.urs:
>> >> > ~~~
>> >> >
>> >> > val main : unit -> transaction page
>> >> >
>> >> >
>> >> > ~~~
>> >> > main.ur:
>> >> > ~~~
>> >> >
>> >> > fun main () =
>> >> >     c <- Js_map.new_map_with ((1, 2)::[]);
>> >> >     return <xml></xml>
>> >> >
>> >> >
>> >> > ~~~
>> >> > js_map.urs:
>> >> > ~~~
>> >> >
>> >> > con js_map :: Type -> Type -> Type
>> >> >
>> >> > val new_map      : k ::: Type -> v ::: Type -> unit -> transaction
>> >> > (js_map k
>> >> > v)
>> >> > val new_map_with : k ::: Type -> v ::: Type -> list (k * v) ->
>> >> > transaction
>> >> > (js_map k v)
>> >> >
>> >> >
>> >> > ~~~
>> >> > js_map.js:
>> >> > ~~~
>> >> >
>> >> > function new_map () {return new Map ();}
>> >> >
>> >> > function new_map_with (arg) {return new Map (arg); }
>> >> >
>> >> >
>> >> > ~~~
>> >> > So in main.ur, you can see that I am calling this Js code in a C
>> >> > context,
>> >> > instead of getting an error complaining about how it should be
>> called on
>> >> > the
>> >> > client, instead I get this confusing error:
>> >> >
>> >> > urweb main
>> >> > /Users/ace/src/cli_only/js_map.urs:4:75: (to 4:87) Unsupported type
>> >> > constructor
>> >> > Constructor:  FFI(Js_map.js_map_with) FFI(Basis.int) FFI(Basis.int)
>> >> > /usr/local/Cellar/urweb/20170105/lib/urweb/ur/basis.urs:127:23: (to
>> >> > 127:25)
>> >> > Unsupported type constructor
>> >> > Constructor:  FFI(Js_map.js_map_with) FFI(Basis.int) FFI(Basis.int)
>> >> > make: *** [all] Error 1
>> >> >
>> >>
>> >> I got the impression that Ur/Web being a whole-program optimizing
>> >> compiler, the only types being supported for marshalling between FFI
>> >> code and non-FFI code are primitive types and abstract types. I think
>> >> I asked this same question some time ago.
>> >>
>> >> So it looks like you will have to work around this somehow.
>> >>
>> >> >
>> >> >
>> >> > _______________________________________________
>> >> > Ur mailing list
>> >> > Ur at impredicative.com
>> >> > http://www.impredicative.com/cgi-bin/mailman/listinfo/ur
>> >> >
>> >>
>> >>
>> >>
>> >> --
>> >> Cheers,
>> >> Artyom Shalkhakov
>> >>
>> >> _______________________________________________
>> >> Ur mailing list
>> >> Ur at impredicative.com
>> >> http://www.impredicative.com/cgi-bin/mailman/listinfo/ur
>> >
>> >
>> >
>> > _______________________________________________
>> > Ur mailing list
>> > Ur at impredicative.com
>> > http://www.impredicative.com/cgi-bin/mailman/listinfo/ur
>> >
>>
>>
>>
>> --
>> Cheers,
>> Artyom Shalkhakov
>>
>> _______________________________________________
>> Ur mailing list
>> Ur at impredicative.com
>> http://www.impredicative.com/cgi-bin/mailman/listinfo/ur
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.impredicative.com/pipermail/ur/attachments/20170521/1488247e/attachment.html>


More information about the Ur mailing list