Module Accessor_base__.Accessor_option
include sig ... end with type 'a t := 'a Base.Option.t
include module type of sig ... end
val none : ('a -> unit -> unit, 'a -> 'b t -> 'b t, [< Accessor_base__.Import.Accessor.variant ]) Accessor_base__.Import.Accessor.t
val some : ('a -> 'b -> 'c, 'a -> 'b t -> 'c t, [< Accessor_base__.Import.Accessor.variant ]) Accessor_base__.Import.Accessor.t
val default : 'a -> is_default:('b -> Base.bool) -> ('i -> 'a -> 'b, 'i -> 'a Base.option -> 'b Base.option, [< Accessor_base__.Import.isomorphism ]) Accessor_base__.Import.Accessor.t
default x ~is_default
is an isomorphism between anoption
and its contents, whereNone
is considered the same asdefault
.is_default x
is expected to betrue
.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 ifx <> b
)construct (get (Some b)) = construct b = None
include Accessor_base__.Import.Accessor.Monad.S with type 'a t := 'a Base.option
include Accessor__.Applicative_signatures_intf.Monad_s2 with type ('a, _) t := 'a t
val map : ((Base.unit -> 'a -> 'b, Base.unit -> 'at -> 'bt, [> Accessor.Subtyping.many ]) accessor -> 'at -> f:('a -> ('b, 'e) t) -> ('bt, 'e) t) optional_args
val mapi : (('i -> 'a -> 'b, Base.unit -> 'at -> 'bt, [> Accessor.Subtyping.many ]) accessor -> 'at -> f:('i Accessor.Index.t -> 'a -> ('b, 'e) t) -> ('bt, 'e) t) optional_args
val all : (Base.unit -> ('a, 'e) t -> 'a, Base.unit -> 'at -> 'bt, [> Accessor.Subtyping.many ]) accessor -> 'at -> ('bt, 'e) t
val all_unit : (Base.unit -> (Base.unit, 'e) t -> _, Base.unit -> 'at -> _, [> Accessor.Subtyping.many_getter ]) accessor -> 'at -> (Base.unit, 'e) t
val iter : ((Base.unit -> 'a -> _, Base.unit -> 'at -> _, [> Accessor.Subtyping.many_getter ]) accessor -> 'at -> f:('a -> (Base.unit, 'e) t) -> (Base.unit, 'e) t) optional_args
val iteri : (('i -> 'a -> _, Base.unit -> 'at -> _, [> Accessor.Subtyping.many_getter ]) accessor -> 'at -> f:('i Accessor.Index.t -> 'a -> (Base.unit, 'e) t) -> (Base.unit, 'e) t) optional_args
val sum : ((module Base.Container.Summable with type t = 'sum) -> (Base.unit -> 'a -> _, Base.unit -> 'at -> _, [> Accessor.Subtyping.many_getter ]) accessor -> 'at -> f:('a -> ('sum, 'e) t) -> ('sum, 'e) t) optional_args
val sumi : ((module Base.Container.Summable with type t = 'sum) -> ('i -> 'a -> _, Base.unit -> 'at -> _, [> Accessor.Subtyping.many_getter ]) accessor -> 'at -> f:('i Accessor.Index.t -> 'a -> ('sum, 'e) t) -> ('sum, 'e) t) optional_args
val count : ((Base.unit -> 'a -> _, Base.unit -> 'at -> _, [> Accessor.Subtyping.many_getter ]) accessor -> 'at -> f:('a -> (Base.bool, 'e) t) -> (Base.int, 'e) t) optional_args
val counti : (('i -> 'a -> _, Base.unit -> 'at -> _, [> Accessor.Subtyping.many_getter ]) accessor -> 'at -> f:('i Accessor.Index.t -> 'a -> (Base.bool, 'e) t) -> (Base.int, 'e) t) optional_args
val map_reduce : ((Base.unit -> 'a -> _, Base.unit -> 'at -> _, [> Accessor.Subtyping.many_getter ]) accessor -> 'at -> empty:'b -> combine:('b -> 'b -> 'b) -> f:('a -> ('b, 'e) t) -> ('b, 'e) t) optional_args
val map_reducei : (('i -> 'a -> _, Base.unit -> 'at -> _, [> Accessor.Subtyping.many_getter ]) accessor -> 'at -> empty:'b -> combine:('b -> 'b -> 'b) -> f:('i Accessor.Index.t -> 'a -> ('b, 'e) t) -> ('b, 'e) t) optional_args
val map_reduce_nonempty : ((Base.unit -> 'a -> _, Base.unit -> 'at -> _, [> Accessor.Subtyping.nonempty_getter ]) accessor -> 'at -> combine:('b -> 'b -> 'b) -> f:('a -> ('b, 'e) t) -> ('b, 'e) t) optional_args
val map_reduce_nonemptyi : (('i -> 'a -> _, Base.unit -> 'at -> _, [> Accessor.Subtyping.nonempty_getter ]) accessor -> 'at -> combine:('b -> 'b -> 'b) -> f:('i Accessor.Index.t -> 'a -> ('b, 'e) t) -> ('b, 'e) t) optional_args