accessor_base

Accessors for Base types, for use with the Accessor library
IN THIS PACKAGE
val none : ( 'a -> unit -> unit, 'a -> 'b Base.Option.t -> 'c Base.Option.t, [< Accessor.variant ] ) Accessor.General.t
val some : ( 'a -> 'b -> 'c, 'a -> 'd Base.Option.t -> 'e Base.Option.t, [< Accessor.variant ] ) Accessor.General.t
val default : 'a -> is_default:( 'b -> Base.bool ) -> ( 'i -> 'a -> 'b, 'i -> 'a Base.option -> 'b Base.option, [< Accessor_base__Import.isomorphism ] ) Accessor.General.t

default x ~is_default is an isomorphism between an option and its contents, where None is considered the same as default. is_default x is expected to be true.

  • get (default _ ~is_default:_) (Some y) = y
  • get (default x ~is_default:_) None = x
  • construct (default _ ~is_default) y = if is_default y then None else Some y

Note that, as explained in the Accessor documentation, well-behaved isomorphisms are expected to satisfy the following properties:

  • get (construct b) = b
  • construct (get at) = at

However, if is_default b = true, both properties can be violated:

  • get (construct b) = get None = x (violation if x <> b)
  • construct (get (Some b)) = construct b = None
include Accessor.Monad.S with type 'a t := 'a Base.option
val map : ?how:[ `Parallel | `Sequential ] -> ( Base.unit -> 'a -> 'b, Base.unit -> 'at -> 'bt, [> Accessor.Subtyping.many ] ) Accessor.General.t -> 'at -> f:( 'a -> 'b Base.option ) -> 'bt Base.option
val mapi : ?how:[ `Parallel | `Sequential ] -> ( 'i -> 'a -> 'b, Base.unit -> 'at -> 'bt, [> Accessor.Subtyping.many ] ) Accessor.General.t -> 'at -> f:( 'i Accessor.Index.t -> 'a -> 'b Base.option ) -> 'bt Base.option
val all : ( Base.unit -> 'a Base.option -> 'a, Base.unit -> 'at -> 'bt, [> Accessor.Subtyping.many ] ) Accessor.General.t -> 'at -> 'bt Base.option
val iter : ?how:[ `Parallel | `Sequential ] -> ( Base.unit -> 'a -> _, Base.unit -> 'at -> _, [> Accessor.Subtyping.many_getter ] ) Accessor.General.t -> 'at -> f:( 'a -> Base.unit Base.option ) -> Base.unit Base.option
val iteri : ?how:[ `Parallel | `Sequential ] -> ( 'i -> 'a -> _, Base.unit -> 'at -> _, [> Accessor.Subtyping.many_getter ] ) Accessor.General.t -> 'at -> f:( 'i Accessor.Index.t -> 'a -> Base.unit Base.option ) -> Base.unit Base.option
val sum : ?how:[ `Parallel | `Sequential ] -> (module Base.Container.Summable with type t = 'sum) -> ( Base.unit -> 'a -> _, Base.unit -> 'at -> _, [> Accessor.Subtyping.many_getter ] ) Accessor.General.t -> 'at -> f:( 'a -> 'sum Base.option ) -> 'sum Base.option
val sumi : ?how:[ `Parallel | `Sequential ] -> (module Base.Container.Summable with type t = 'sum) -> ( 'i -> 'a -> _, Base.unit -> 'at -> _, [> Accessor.Subtyping.many_getter ] ) Accessor.General.t -> 'at -> f:( 'i Accessor.Index.t -> 'a -> 'sum Base.option ) -> 'sum Base.option
val count : ?how:[ `Parallel | `Sequential ] -> ( Base.unit -> 'a -> _, Base.unit -> 'at -> _, [> Accessor.Subtyping.many_getter ] ) Accessor.General.t -> 'at -> f:( 'a -> Base.bool Base.option ) -> Base.int Base.option
val counti : ?how:[ `Parallel | `Sequential ] -> ( 'i -> 'a -> _, Base.unit -> 'at -> _, [> Accessor.Subtyping.many_getter ] ) Accessor.General.t -> 'at -> f:( 'i Accessor.Index.t -> 'a -> Base.bool Base.option ) -> Base.int Base.option
val map_reduce : ?how:[ `Parallel | `Sequential ] -> ( Base.unit -> 'a -> _, Base.unit -> 'at -> _, [> Accessor.Subtyping.many_getter ] ) Accessor.General.t -> 'at -> empty:'b -> combine:( 'b -> 'b -> 'b ) -> f:( 'a -> 'b Base.option ) -> 'b Base.option
val map_reducei : ?how:[ `Parallel | `Sequential ] -> ( 'i -> 'a -> _, Base.unit -> 'at -> _, [> Accessor.Subtyping.many_getter ] ) Accessor.General.t -> 'at -> empty:'b -> combine:( 'b -> 'b -> 'b ) -> f:( 'i Accessor.Index.t -> 'a -> 'b Base.option ) -> 'b Base.option
val map_reduce_nonempty : ?how:[ `Parallel | `Sequential ] -> ( Base.unit -> 'a -> _, Base.unit -> 'at -> _, [> Accessor.Subtyping.nonempty_getter ] ) Accessor.General.t -> 'at -> combine:( 'b -> 'b -> 'b ) -> f:( 'a -> 'b Base.option ) -> 'b Base.option
val map_reduce_nonemptyi : ?how:[ `Parallel | `Sequential ] -> ( 'i -> 'a -> _, Base.unit -> 'at -> _, [> Accessor.Subtyping.nonempty_getter ] ) Accessor.General.t -> 'at -> combine:( 'b -> 'b -> 'b ) -> f:( 'i Accessor.Index.t -> 'a -> 'b Base.option ) -> 'b Base.option