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.shalkha...@gmail.com> wrote: > 2017-05-22 6:22 GMT+06:00 Aistis Raulinaitis <sheganin...@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@impredicative.com > > http://www.impredicative.com/cgi-bin/mailman/listinfo/ur > > > > > > -- > Cheers, > Artyom Shalkhakov > > _______________________________________________ > 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