Module Bogue.Tvar

module Tvar: sig .. end

Transform variables

Transform variables are a way to share a common data between two widgets, when the data has a different meaning (or even a different type) for each widget. One widget holds the original value, and the other widget needs to apply a transformation each time it wants to read or modify the value.

For instance you want to share a bank account b between Alice in France and Bob in the USA. The value is stored by Alice in EUR, and when Bob does get b, he gets the value in USD. Similarly, if he does set b 50 to put 50USD on the account, then Alice's value will automatically have the amount in EUR.

What is interesting is that the transformation functions can also have side-effects. For instance, send an email each time Bob or Alice modifies the amount.

A more prosaic example would be a slider which shares its value as an integer between 0 and 100, and another widget which needs to read/save this value as a float between 0 and 1, and each one of them gets notified when the other changes the value.

Dependency graph

type ('a, 'b) t 

a transform variable of type ('a,'b) is a variable of type 'b attached to a variable of type 'Var.t by a bi-directional transformation.

val create : 'a Var.t ->
t_from:('a -> 'b) -> t_to:('b -> 'a) -> ('a, 'b) t
val get : ('a, 'b) t -> 'b
val set : ('a, 'b) t -> 'b -> unit