Fun.Generic
Generic functions.
module Meta : sig ... end
Generic function metadata keys.
val pp : 'a Type.Gist.t -> Stdlib.Format.formatter -> 'a -> unit
pp g ppf v
formats v
as described by g
on ppf
with a pseudo OCaml syntax similar to what you would see in the toplevel. The function can be selectively overriden via the Meta.Fmt
metadata key.
val equal : 'a Type.Gist.t -> 'a -> 'a -> bool
equal g v0 v1
determines the equality of values v0
and v1
as described by g
. The process can be selectively overriden via the Meta.Equal
metadata key.
The function raises Invalid_argument
on functional values and abstract types without representation; you can ignore them by using Meta.Equal.ignore
for their Meta.Equal
key.
val compare : 'a Type.Gist.t -> 'a -> 'a -> int
compare g v0 v1
compares values v0
and v1
as described by g
. The function can be selectively overriden via Meta.Compare
metadata keys.
The function raises Invalid_argument
on function values and abstract types without representation; you can ignore them by using Meta.Compare.ignore
for their Meta.Compare
key.
val random :
'a Type.Gist.t ->
?size:int ->
?state:Stdlib.Random.State.t ->
unit ->
'a
random g ~state ()
generates a random value described by g
. state
is the random state to use, defaults to Random
.get_state ()
.
size
is an indicative strictly positive, size factor to let users control an upper bound on the size and complexity of generated values. It should be used by generators to proportionally bound the length of sequences or the number of nodes in trees. It can be altered by gists via the Meta.Random.Size
key.
The function raises Invalid_argument
on functional values (may be lifted in the future) and abstract types without representation; you can represent them by using a suitable Meta.Random.Gen.const
constant value for the Meta.Random.Gen
key.