[Ur] About clientOnly

Aistis Raulinaitis sheganinans at gmail.com
Sun May 21 23:19:53 EDT 2017


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..

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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.impredicative.com/pipermail/ur/attachments/20170521/e48e1031/attachment.html>


More information about the Ur mailing list