Source file with_transfer.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
open! Core
open! Js_of_ocaml
type ('message, 'transfer) t =
{ message : 'message
; transfer : 'transfer array
}
let singleton x = { message = x; transfer = [| x |] }
let post_message ctx { message; transfer } =
match (ctx : 'message Post_context.t) with
| From_worker ->
Post_message.post_message (Post_message.from_worker ()) ~message ~transfer
| To_worker w -> Post_message.post_message (Post_message.to_worker w) ~message ~transfer
;;
module Packed = struct
type ('message, 'transfer) unpacked = ('message, 'transfer) t
type 'message t = Packed : ('message, 'transfer) unpacked -> 'message t [@@unboxed]
let singleton x = Packed (singleton x)
let post_message ctx (Packed t) = post_message ctx t
end
let pack t : _ Packed.t = Packed t