module Acml:sig..end
API for ACml objects creation.
An ACml object contains the description of a cellular automaton, a configuration or both (and many other things...).
type t
Abstract type for ACml objects.
val valid : (t -> unit) -> unitvalid transfo sends the transformation function transfo to the
main program and terminates. The main program then uses transfo
to transform a given Acml object into the desired one. New calls
to valid erase the preceeding calls. Thus, only one ACml transformation
can be defined by file.
val set_dimension : t -> int -> unitset_dimension a d sets the integer lattice of dimension d.
val set_moore_neighborhood : t -> int -> unitSet a Moore neighbourhood of given radius (all cells having all their coordinates less than the given radius in absolute value).
val set_moore_neighbourhood : t -> int -> unitBritish version of set_moore_neighborhood.
val set_vonneumann_neighborhood : t -> int -> unitSet a von Neumann neighbourhood of given radius (all cells whose sum of absolute value of coordinates is less than the given radius).
val set_vonneumann_neighbourhood : t -> int -> unitBritish version of set_vonneumann_neighborhood.
val set_cross_neighborhood : t -> int -> unitSet a cross-shaped neighbourhood of given radius (all cells having exactly one non-zero coordinate, and less than the given radius in absolute value).
val set_cross_neighbourhood : t -> int -> unitBritish version of set_cross_neighborhood.
val centercell : t -> intWhen defining a local rule, the states of neighbours is given
through an array of states. centercell a gives the array index corresponding to the
current cell (see Acml.set_rule).
val relativecell : t -> int -> int -> intrelativecell a i j gives array index corresponding to the
neighbour specified by relative Cartesian coordinates (i,j), (0,0)
corresponding to the current cell. In dimension 1, second
coordinate should be 0.
val neighbors : t -> (int * int) listneighbors a gives the list of neighbors as coordinate pairs. It may (actually it does) contain the cell itself.
val set_cardinality : t -> int -> unitset_cardinality a n specifies that the alphabet is the set set of integers from 0 to n-1.
val set_rule : t ->
?cache:((int array -> int) -> int array -> int) ->
?no_table:bool -> (int array -> int) -> unitSet the transition rule. Must be called after other
charracteristics of the CA (e.g. dimension, neighbourhood) are set
to their definitive value. The transition rule is a function
taking as single argument an array giving the state of each
neighbouring cell in some order (use Acml.centercell or
Acml.relativecell to get the index of a given neighbour in that
array) and returning a new state. By default and if memory allows
it, this function will be called only once for each possible
content of the array and all results memorized. For large number
of states and/or radius this is not possible and the function is
called directly at each cell update. The optional argument cache
gives the opportunity to add some user-given cache mechanism to
improve efficiency: if the full memorization of the local function
f as a transition table is impossible then f is replaced by
cache f. Finally if no_table is set to true (it's false by
default) then no full memorization is done and f (or cache f)
is used at each cell update.
val set_rule_fun : t -> ((int -> int -> int) -> int) -> unitSimilar to Acml.set_rule but the transition rule in this case has
acces to the value of neighbours through a reading
function. set_rule_fun a f sets transition rule f in object a
where f read give the new state of a cell assuming read x y gives
the value of (relative) neighbour (x,y) of that cell.
val set_multiset_rule : t ->
?cache:((int -> int array -> int) -> int -> int array -> int) ->
?no_table:bool -> (int -> int array -> int) -> unitSimilar to Acml.set_rule but assuming that the rule is invariant by
any permutation of neighbours. The local rule is given as a
function of two arguments. The first is the value of the cell. The
second argument is an array giving the number of occurrences of
each state in its neighbourhood (including the cell itself). The
remarks concerning Acml.set_rule apply.
val set_multiset_rule_fun : t -> (int -> (int -> int) -> int) -> unitAcml.set_multiset_rule_fun is similar to Acml.set_multiset_rule but
with a functional description of the neighbourhood. More precisly,
the local rule is given as a function of two arguments: the first
is the value of the cell, and the second argument is a function
which on input i returns the number of occurrences of state i
in the neighbourhood (including the cell itself). The remarks
concerning Acml.set_rule apply.
val active_only : t -> (int -> bool) -> unitReduce updating to the following list of states. Must be called after Acml.set_rule. At each step, the updating is done for each cell that has at least one neighbour in an active state.
type 'a alphabet =
| |
AlphaArray of |
| |
AlphaFun of |
Type to describe an alphabet of arbitrary type. For functional description
AlphaFun (n,enum), the first argument n is the cardinal of the alphabet
and the second argument enum is an enumeration function which must be well
defined over all integers from 0 to n-1.
val poly_set_rule : t ->
?active:('a -> bool) ->
?printer:('a -> string) ->
alphabet:'a alphabet -> ('a array -> 'a) -> unitEquivalent to Acml.set_rule but for states of arbitrary type, the
alphabet being given as argument. The optional argument active,
if given, will restrict the application of the local rule to
states x such that active x is true (it is similar to what
set_rule does with Acml.active_only). printer is a function
giving a string representation for each state and it is used for
debugging purpose only.
val poly_set_rule_fun : t ->
?active:('a -> bool) ->
?printer:('a -> string) ->
alphabet:'a alphabet -> ((int -> int -> 'a) -> 'a) -> unitThis function is to Acml.poly_set_rule what Acml.set_rule_fun is to Acml.set_rule.
val poly_set_multiset_rule : t ->
?active:('a -> bool) ->
?printer:('a -> string) ->
alphabet:'a alphabet -> ('a -> ('a -> int) -> 'a) -> unitThis function is to Acml.poly_set_rule what Acml.set_multiset_rule is
to Acml.set_rule. Note that the local rule is a function taking two
arguments: the state of the cell and a function giving for each
state its number of occurrences in the neighbourhood.
val declare_stochastic : t -> unitDisable all cache mechanism to allow successive calls of the local
function with identical neighbourhood to possibly give different
results. It has an effect only if it is called before the function
setting the local rule (e.g. Acml.set_rule or
Acml.set_multiset_rule).
val declare_deterministic : t -> unitDeprecated: rules are now considered deterministic by
default. Declare that the local function is already
deterministic and that a cache mechanism is not necessary to
ensure determinism. The decision of whether some cache mechanism
is added therefore becomes uniquely a question of efficiency. It
has an effect only if it is called before the function setting the
local rule (e.g. Acml.set_rule or Acml.set_multiset_rule).
val ensure_determinism : t -> unitAdd a cache mechanism in order to ensure determinism: two
successive calls of the local function with the same neighborhood
will produce the same result. It has an effect only if it is
called before the function setting the local rule
(e.g. Acml.set_rule or Acml.set_multiset_rule). This function has
no effect when using *_rule_fun functions for setting the local
rule.
val ca_random : int -> intPseudo-random generator reserved to cellular automata
generation. ca_random bound returns an integer between 0 and
bound - 1. If bound is 0 it returns 0. The user must ensure that the transformation function
transmitted through Acml.valid is such that two consecutive calls
with the same values of parameters and the same random sequence
given by ca_random produces the same cellular automaton. If it
is not the case, saving a CA might not give the desired results.
val ca_random_float : float -> floatSame as Acml.ca_random but for floats.
val conf_random : int -> intPseudo-random generator reserved to configuration
generation. conf_random bound returns an integer between 0 and
bound - 1. If bound is 0 it returns 0. The user must ensure that the transformation function
transmitted through Acml.valid is such that two consecutive calls
with the same values of parameters including universe size (see Acml.set_universe_size and Acml.get_universe_size) and the same random
sequence given by conf_random produces the same initial
configuration.
val conf_random_float : float -> floatSame as Acml.conf_random but for floats.
val set_universe_size : t -> int -> int -> unitSet the dimensions of the universe (for dimension 1, second argument is the time anticipation). This overrides the user choice.
val get_universe_size : t -> int * intReturn the dimensions of the universe chosen by the user.
type 'a initconf =
| |
General of |
| |
GenArray of |
| |
Bernoulli of |
| |
RandomBernoulli of |
| |
RandomUniform |
| |
Uniform of |
| |
Mask of |
| |
FixedSize of |
| |
MultiLayer of |
Type to describe initial configurations. General f produces a
configuration obtained by evaluating f for each coordinate
(second argument ignored in dimension 1) . GenArray f produces a
configuration described by the matrix generated by calling f ()
and extended periodically or shortened to fit the current size of
the universe. Bernoulli p describes a random configuration
according to the Bernouilli measure where the probability of any
state q is given by f q. RandomBernouilli tab also describes
a random configuration according to a Bernoulli measure where the
probability of a state is given by its number of occurrences in
tab divided by the length of tab. For instance a tab
containing 0;1;0 correspond to proba 1/3 for 1, 2/3 for 0 and 0
for any other state. Uniform x describes a configuration
everywhere equal to x. RandomUniform describes a random
configuration with the uniform measure giving the same weight to
every states. Mask (f,c) describes a configuration equal to c
but only at positions where f evaluates to true (second
coordinate ignored in dimension 1). FixedSize (w,h,conf)
specifies configuration conf but with a fixed size (w,h).
MultiLayer l describes the configuration obtained by building
each configuration in the list l in the order specified.
val add_init_conf : t -> ?set:bool -> string -> int initconf -> unitSet the initial configuration.
val poly_add_init_conf : t ->
?set:bool -> string -> alphabet:'a alphabet -> 'a initconf -> unitSet the initial configuration for polymorphic functions.
val radius : t -> intReturn the current radius of the CA.
val arity : t -> intReturn the current arity (number of neighbours) of the CA.
val cardinality : t -> intReturn the current number of states of the CA.
val dimension : t -> intReturn the current dimension of the CA.
val set_name : t -> string -> unitGive a name to the family.
val get_name : t -> stringGet the name of the family.
val set_object_name : t -> string -> unitGive a name to the object being constructed.
val get_object_name : t -> stringGet the name of the object being constructed.
val set_state_name : t -> int -> string -> unitGive a name to some state. It is better to give names to states only after cardinality is set via Acml.set_cardinality
val get_state_name : t -> int -> stringGet the name of a given state. Raises Not_found if the given state has no name.
val poly_set_state_name : t -> alphabet:'a alphabet -> 'a -> string -> unitSame as Acml.set_state_name but in polymorphic version
val poly_get_state_name : t -> alphabet:'a alphabet -> 'a -> stringSame as Acml.get_state_name but in polymorphic version
val add_description : t -> string -> string -> unitAdd some info about the object or the family. The first string is used as a title, the second as descriptive text.
val get_stop_time : unit -> intGet the stop time (if negative, no stop will be applied).
val set_stop_time : int -> unitSet the stop time (if negative, no stop will be applied).
val param : t -> string -> int -> int -> int -> intCreates a parameter in the user interface. param ca name min max
init create the parameter name in ca. The returned value is
init if this is the initial generation (see Acml.initial) or a
value between min and max chosen through the user
interface.
val bool_param : t -> string -> bool -> boolSame as Acml.param but with a boolean type.
val float_param : t -> string -> float -> float -> float -> floatSame as Acml.param but with type float.
val string_param : t -> string -> string -> stringSame as Acml.param but with a string type.
val text_param : t -> string -> string -> stringSame as Acml.string_param but, in the user interface, multiline string values
are easier to manipulate.
val file_param : t -> string -> string -> stringSame as Acml.string_param but, in the user interface, the value
given can be changed via a file selection dialog.
val choice_param : t -> ?choice:string -> string -> string list -> stringSame as Acml.param but with a list of string to choose from. The
default value is the optional argument choice if given and if present in the list, or the head of the list or the empty string if the
list is empty.
val choice_array_param : t -> ?choice:int -> string -> string array -> intSame as Acml.param but with a array of string to choose from. The
choice is returned as the index of the element in the array. The
default value is element of index choice in the array if given
and if it refers to a valid index inside the given array, or the
first element (index 0) otherwise.
val doc_param : t -> string -> string -> unitdoc_param a name explanations associates explanations to parameter name.
val group_param : t -> string -> string list -> unitgroup_param a name list creates a group called name containing all parameters in list.
val std_params : ?dimension:int ->
?dimension_fixed:bool ->
?states:int ->
?states_fixed:bool ->
?radius:int ->
?radius_fixed:bool ->
?neighborhood:string ->
?neighborhood_fixed:bool -> t -> int * int * int * stringCreates standard parameters dimension, states, radius and
neighborhood using default values given (if any). Then set the
properties of the given ACML object to the corresponding
parameters values. When one of the boolean fixed_X is set to
true, the corresponding parameter is not created but the
corresponding property of the given ACML object is still fixed.
It returns the 4-uple (dimension, states, radius,
neighborhood).
type representation =
| |
Unicolor of |
| |
Transparent |
| |
NorthArrow |
| |
SouthArrow |
| |
EastArrow |
| |
WestArrow |
| |
Bordercolor of |
| |
Multiple of |
Type to describe graphical representation of states (should be self-explicit).
val color_gradient : t -> (int * int * int) array -> int -> representationUtility function to handle color gradients. color_gradient a
color_tab state gives a representation of type Unicolor for
state obtained by linear interpolation from RVB colors in
color_tab (using the number of states of a).
val add_colormap : t -> ?set:bool -> string -> (int -> representation) -> unitadd_colormap a name f adds a new view which is just a colormap
giving a representation for each state (function f). If optional
argument set is set to true, then the view is immediatly
selected.
val add_view : t ->
?set:bool ->
string -> (int -> int -> (int -> int -> int) -> representation) -> unitAdd a new view which is defined by a function which given current position
and a reading function (x, y, read_universe) returns a
representation.
val poly_add_colormap : t ->
?set:bool ->
string -> alphabet:'a alphabet -> ('a -> representation) -> unitSame as Acml.add_colormap but using polymorphic alphabet.
val poly_add_view : t ->
?set:bool ->
string ->
alphabet:'a alphabet ->
(int -> int -> (int -> int -> 'a) -> representation) -> unitSame as Acml.add_view but using polymorphic alphabet.
val get_representation : t -> (int -> int -> int) -> int -> int -> representationGive the current representation of a cell. Since add_view allows arbitrary computation to produce the representation, giving the coordinate of the cell is not enough in the general case. Therefore the call is of the form get_representation a reader x y where reader is a reading function and x, y give the position.
val poly_get_representation : t ->
alphabet:'a alphabet ->
(int -> int -> 'a) -> int -> int -> representationSame as Acml.get_representation but using polymorphic alphabet.
type 'a modifier =
| |
Forced of |
| |
Map of |
| |
GeneralZone of |
| |
SimpleZone of |
| |
FreeZone of |
type to describe modification methods.
Forced n changes all states in the selected zone to n.
GeneralZone f describes a modification method such that the state f
state.(x).(y) (ax,ay,bx,by) x y is affected to cell (x,y) which was
previousely in state state.(x).(y), this for all cells of the modification
zone which is given by (ax,ay,bx,by). The convention for zone coordinates are fixed when calling Acml.add_modif.
SimpleZone f is the same as GeneralZone f except that f doesn't take the
coordinates of the modification zone as argument.
Finally, in FreeZone f, the function f takes 3 arguments: the zone
coordinates a reading function and a writing function. The reading and
writing functions should be called with arguments belonging to the
zone. Moreover, in dimension 1, the second arguments of the reading and
writing functions have the following interpretation: 0 represents the
earliest configuration in memory (= current time - height of universe); the
second argument is always interpreted as 0 in the writing function; non-zero
values in the reading function allows to read configurations between the
earliest and the current one.
val add_modif : t ->
?key:string ->
?set:bool ->
?left:bool -> ?oriented:bool -> string -> int modifier -> unitAdd a modif method referenced in the user interface by its
name. Optional parameter oriented indicates whether the zone
coordinates should be unoriented (lower-left corner, then upper-right
corner, this is the default) or oriented (mouse click point, then mouse release point). Optional parameter
key affects the modif to a key (to be pressed while
clicking). Optional parameter set tells whether the method
should be selected immediately as operative on click, in which
case left tells whether it should be affected to left button
(true means left, false means right and not setting the option
means both).
val poly_add_modif : t ->
?key:string ->
?set:bool ->
?left:bool ->
?oriented:bool ->
string -> alphabet:'a alphabet -> 'a modifier -> unitSame as Acml.add_modif but in polymorphic version.
val add_snapshot : t ->
?set:bool -> string -> (int -> int -> (int -> int -> int) -> unit) -> unitAdd a snapshot method referenced in the user interface by its
name. A snapshot is a function taking 3 parameters: width,
length and a read function such that read i j gives the
value of the universe at position (i,j).
val poly_add_snapshot : t ->
?set:bool ->
string ->
alphabet:'a alphabet ->
(int -> int -> (int -> int -> 'a) -> unit) -> unitSame as Acml.add_snapshot but in polymorphic version.
val add_measurement : t ->
?trigger:bool ->
?set:bool ->
string ->
(int ->
int -> int -> (int -> int -> int) -> (int -> int -> int -> unit) -> unit) ->
unitAdd a measurement. A measurement is a function applied at each
step and taking 5 arguments: the current time, the size of the
universe (2 args), a function to read the current configuration
and a function to modify the current configuration. The optional
parameter trigger (default false) tells whether the measurement
must be triggered on user demand only (trigger=true) or
automatically at each step (trigger=false). In the latter case
(trigger=false), the optional argument set (default false) tells whether the
triggering is on or off at the beginning (this can be later changed via the user interface).
val poly_add_measurement : t ->
?trigger:bool ->
?set:bool ->
string ->
alphabet:'a alphabet ->
(int ->
int -> int -> (int -> int -> 'a) -> (int -> int -> 'a -> unit) -> unit) ->
unitSame as Acml.add_measurement but in polymorphic version.
val doc_action : t -> string -> string -> unitdoc_action a name explanations associates explanations to the action name.
type action =
| |
Save |
| |
Shoot |
| |
New |
| |
Stop |
Sceanrios are simple list of actions.
val clear_scenario : unit -> unitClear the current scenario.
val addto_scenario : action -> unitAdd an action to the end of the scenario.
type gui_t
Abstract type of GUI elements
val gui_window : ?height:int -> ?width:int -> string -> gui_t -> unit -> unitDisplay a window containing a GUI element. The first parameter is the title of the window. It returns a function to kill the window.
val gui_vbox : gui_t list -> gui_tProduce a GUI element consisting of a list of vertically aligned GUI elements
val gui_hbox : gui_t list -> gui_tProduce a GUI element consisting of a list of horizontally aligned GUI elements
val gui_label : string -> gui_tProduce a label containing text to display.
val gui_full_label : string -> gui_t * (string -> unit)Produce a label containing text to display together with a function to update label content.
val gui_textbox : string -> gui_tProduce a scrollable text box GUI element. The parameter is the text to display.
val gui_textbuffer : string -> gui_t * (string -> unit)Produce a scrollable text box GUI element and a function to later add more text in it. The parameter is the first text to display.
: string -> (unit -> unit) -> gui_tProduce a clickable button with a label and an associated action.
type draw_context
Abstract type to handle drawings
val size : draw_context -> int * intReturn the size of a drawing context.
val point : draw_context -> ?color:int * int * int -> int -> int -> unitDraw a point in the given draw_context. The meaning of the optional argument should be clear and the two regular arguments are coordinates (horizontal then vertical).
val rectangle : draw_context ->
?color:int * int * int -> int -> int -> int -> int -> unitDraw a rectangle in the given draw_context. The meaning of the optional argument should be clear and the two first regular arguments are coordinates (horizontal then vertical) and the two last argument are width and height.
val gui_drawing_area : ?height:int ->
?width:int ->
?background:int * int * int -> unit -> gui_t * draw_contextProduce a GUI element (to place inside other GUI elements) together with a drawing context (to do actual drawings later).
val clear : draw_context -> unitClear the content of the given draw_context.
val add_mem_info : int -> unitadd_mem_info n is invoked to declare that n additional bytes
are used in the computation of the current rule. It has a purely
informative purpose and can be omitted without problem.
val infomsg : string -> unitSend a message to be printed by the user interface.
val add_shortcut : string -> (string -> (string * string) list) -> unitAdd a shortcut to quickly load an ACml object generated by the
current file with a particular combination of parameters. This
function must be invoked before the call to Acml.valid. More
precisely, add_shortcut regexp list_gen_fun will add a shortcut
to the user interface such that if the string given by the user
matches the regular expression regexp (conventions of module
Str from Ocaml standard distribution) then the transformation
function of the current file is called with preset parameters
given by the association list produced by calling list_gen_fun
on the user string.
val declare_object : ?family:string -> string -> unitdeclare_object name simply tell the GUI that name is a valid
shorcut to try that will produce an interesting object. In a
plugin file, a family name must be provided using the optional
argument.
val declare_file_type : ?transform:(string -> string) -> string -> string list -> unitdeclare_file_type name extension_list simply tell the GUI that file having extension in extension_list are interesting and give a name to that set of files. The optional argument transform is a transformation applied to the selected filename.
val neednewac : t -> boolReturn whether user requested a new AC.
val neednewconf : t -> boolReturn whether user requested a new configuration.
type execution =
| |
EachStep |
| |
EachNewObject_after |
| |
EachNewObject_before |
| |
ProgramStartup |
| |
UserDemand |
val valid_plugin : ?name:string ->
?description:string ->
?activate:bool ->
?executed_at:execution ->
?start:(unit -> unit) -> ?finish:(unit -> unit) -> (t -> unit) -> unitvalid_plugin transfo sends the transformation function transfo
to the main program and terminates. The main program then uses
transfo as a plugin. The optional argument activate tells
whether the plugin should be immediately activated (don't by
default). The optional argument executed_at tells when the
transformation function is executed. Optional arguments start
and finish are functions called when plugin is activated or
desactivated (respectively). The other optional arguments are
self-explanatory. Name of plugins are case-insensitive ('Ab' and
'ab' refer to the same plugin) but the name is displayed as you
specify.
type regenerate =
| |
Automaton |
| |
Configuration |
| |
Both |
| |
Nothing |
| |
Skip |
val valid_hook_plugin : ?activate:bool ->
?name:string ->
pattern:string ->
?description:string ->
?start:(unit -> unit) ->
?finish:(unit -> unit) ->
(string ->
t ->
int * int ->
(int -> int -> int) ->
(int -> int -> int -> unit) -> regenerate * string list) ->
unitRegister a hook which is triggered when the user gives a 'shortcut string' matching regular expression pattern. The 'action' registered is a function recieving 5 arguments: the 'shortcut string', the acml object to transform, the size of the universe, a reading function and a writing function. This function must return a pair (regen, list). regen is an indication about what needs to be regenerated after the application of the hook. Returning Skip means to go on as if the 'shortcut string' was not recognized by pattern (e.g. it can be used to design hooks that triggers on a set of string that is not a regular alnguage). list is list of strings, each of which will be considered as a new 'shortcut string' and will be considered for further processing by this hook or other ones. Keep in mind that other hooks can ask regeneration of automaton and/or configuration even if this one doesn't. The optional argument activate has the same meaning as in Acml.valid_plugin and is set to false by default.
Use with care: things can be non-intuitive with these functions.
val initial : t -> boolinitial ac returns true if and only if ac is a first
generation ACml object (i.e. first time the currently chosen family
has been called to generate an object). You should not make the
generation of rule/configuration depend on this information, it is
not preserved by the saving mechanism.
val initialize : t -> unitMake the given ACml object a first generation object and reset
almost everything in the object to a default value. After the
initialization, a call to initial on the object returns true.
val apply : string -> t -> unitapply_builtin name a applies the
transformation called name on object a.
val get_builtin_names : unit -> string listThis function gives the list of available buitin transformations.
val get_external_names : unit -> string listThis function gives the list of currently available external transformations (loaded from a file since the program started).
val clean_decorations : t -> unitRemove all parameters / documentation / user colormaps and user modif methods.
val remove_param : t -> string -> unitRemove a given parameter.
val filter_params : t -> (string -> bool) -> unitfilter_params a filter removes all parameters that do not
satisfy the filter filter.
val set_param : t -> string -> int -> unitForce the value of a parameter. Overrides the user choice. Raise an error if parameter doesn't exist or has a different type.
val set_bool_param : t -> string -> bool -> unitSame as Acml.set_param but for a boolean param.
val set_float_param : t -> string -> float -> unitSame as Acml.set_param but for a float param.
val set_string_param : t -> string -> string -> unitSame as Acml.set_param but for a string param. A file param can be
set via set_string_param.
val set_choice_param : t -> string -> string -> unitSame as Acml.set_param but for a choice param.
val get_param : t -> string -> intReturn current value of the parameter. Raise an error if parameter doesn't exist or has a different type.
val get_bool_param : t -> string -> boolSame as Acml.set_param but for a boolean param.
val get_float_param : t -> string -> floatSame as Acml.set_param but for a float param.
val get_string_param : t -> string -> stringSame as Acml.set_param but for a string param. A file param can
also be read via set_string_param.
val get_choice_param : t -> string -> stringSame as Acml.set_param but for a choice param.
val kernel_cast : t -> Kernel.actypeCast an object to the internal type used in the kernel.
val get_views : t -> string listGive the list of names of currently available views.
val get_view : t -> stringGive the name of currently chosen view.
val set_view : t -> string -> unitSet the view given by its name.