Primus.ObservationMachine 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 statementprovide ?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 -> stringname observation is a name of the observed attribute.
val inspect : 'a observation -> 'a -> Core_kernel.Sexp.tinspect observation value returns a sexp representation of an observed value
val list_providers : unit -> provider listenumerate all currently available observation providers
val list : unit -> info listlist () introspects all available observations.
module Provider : sig ... endData interface to the provider.