2017-05-22 6:22 GMT+06:00 Aistis Raulinaitis <[email protected]>: > 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 > [email protected] > http://www.impredicative.com/cgi-bin/mailman/listinfo/ur > -- Cheers, Artyom Shalkhakov _______________________________________________ Ur mailing list [email protected] http://www.impredicative.com/cgi-bin/mailman/listinfo/ur
