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.
type ('a, 'b) t 
a transform variable of type ('a,'b) is a variable of type 'b attached
     to a variable of type 'a 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