package bonsai

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file driver.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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
open! Core
open! Import

type ('i, 'r) t =
  { input_var : 'i Incr.Var.t
  ; mutable last_view : string
  ; handle : 'r Bonsai_driver.t
  }

let create
      (type i r)
      ?initial_model_sexp
      ?(optimize = true)
      ~clock
      ~(initial_input : i)
      (component : (i, r) Bonsai.Arrow_deprecated.t)
  : (i, r) t
  =
  let input_var, computation =
    let input_var = Incr.Var.create initial_input in
    let computation =
      input_var
      |> Incr.Var.watch
      |> Bonsai.Private.Value.of_incr
      |> Bonsai.Private.conceal_value
      |> component
    in
    input_var, computation
  in
  let handle = Bonsai_driver.create ?initial_model_sexp ~optimize ~clock computation in
  { input_var; last_view = ""; handle }
;;

let set_input { input_var; _ } input = Incr.Var.set input_var input
let input { input_var; _ } = Incr.Var.value input_var
let last_view { last_view; _ } = last_view
let store_view unpacked s = unpacked.last_view <- s
let reroute f { handle; _ } = f handle

include struct
  open Bonsai_driver

  let schedule_event h = reroute schedule_event h
  let flush h = reroute flush h
  let result h = reroute result h
  let has_after_display_events h = reroute has_after_display_events h
  let trigger_lifecycles h = reroute trigger_lifecycles h
end

include struct
  open Bonsai_driver.Expert

  let sexp_of_model h = reroute sexp_of_model h
  let result_incr h = reroute result_incr h
  let action_input_incr h = reroute action_input_incr h
  let lifecycle_incr h = reroute lifecycle_incr h
  let clock h = reroute clock h
  let invalidate_observers h = reroute invalidate_observers h
  let reset_model_to_default h = reroute reset_model_to_default h
end
OCaml

Innovation. Community. Security.