Primus.Observation
Machine Observation.
The Primus Framework is built on top of the Machine observations. The Machine components make their own observations, based on observation made by other components.
A value of type 'a observation
is a first-class representation of an event of type 'a
. While machine components are functors, the values of type observation should not depenend on the type of the functor.
An observation provider. A provider facilitates introspection of the Primus Machine, for the sake of debugging and dumping the effects. The provider should not (and can't be) used for affecting the behavior of a machine, or for the analysis, as its main purpose is debugging, logging, and tracing the execution.
val provide :
?desc:string ->
?inspect:('a -> Core_kernel.Sexp.t) ->
?package:string ->
string ->
'a observation * 'a statement
provide ?inspect name
returns a pair of two handlers. The first element is used to observe values, the second is used to provide values for the observation.
The inspect
function may provide a sexp representation of an observed value, that will be used for introspection and pretty-printing (it is not required, and if it is provided, it is not necessary to disclose everything
val name : 'a observation -> string
name observation
is a name of the observed attribute.
val inspect : 'a observation -> 'a -> Core_kernel.Sexp.t
inspect observation value
returns a sexp representation of an observed value
val list_providers : unit -> provider list
enumerate all currently available observation providers
val list : unit -> info list
list ()
introspects all available observations.
module Provider : sig ... end
Data interface to the provider.