sig
  module type M =
    sig
      type 'a t
      type 'a action
      val empty : 'LablgtkReact.M.t
      val on_action :
        ('a * 'b) LablgtkReact.M.t ->
        '-> 'LablgtkReact.M.action -> ('a * 'b) LablgtkReact.M.t
    end
  module type FRP =
    sig
      type 'a t
      val create : unit -> 'LablgtkReact.FRP.t * ('-> unit)
      val fold : ('-> '-> 'a) -> '-> 'LablgtkReact.FRP.t -> unit
    end
  module Core :
    functor (FRP : FRP->
      functor (M : M->
        sig
          type 'a t = 'LablgtkReact.M.t
          type 'a action = 'LablgtkReact.M.action
          type id
          type 'a callback =
              bool ->
              (LablgtkReact.Core.id * 'a) LablgtkReact.Core.t ->
              'LablgtkReact.Core.action -> unit
          type 'a container_link =
              (LablgtkReact.Core.id * 'a) LablgtkReact.Core.t ->
              'LablgtkReact.Core.action -> unit
          class ['a] core :
            ?container_link:'LablgtkReact.Core.container_link ->
            unit ->
            object
              method connect : 'LablgtkReact.Core.callback -> unit
              method send : 'LablgtkReact.Core.action -> unit
              method set_container_link :
                'LablgtkReact.Core.container_link option -> unit
            end
        end
end