sig
  val ( * ) :
    ('a, [< `R | `W > `R ]) CCArray1.S.t ->
    ('a, [< `R | `W > `R ]) CCArray1.S.t -> ('a, [< `R | `W ]) CCArray1.S.t
  val ( + ) :
    ('a, [< `R | `W > `R ]) CCArray1.S.t ->
    ('b, [< `R | `W > `R ]) CCArray1.S.t -> ('a, [< `R | `W ]) CCArray1.S.t
  val ( *! ) :
    ('a, [< `R | `W > `R ]) CCArray1.S.t ->
    CCArray1.S.elt -> ('a, [< `R | `W ]) CCArray1.S.t
  val ( +! ) :
    ('a, [< `R | `W > `R ]) CCArray1.S.t ->
    CCArray1.S.elt -> ('a, [< `R | `W ]) CCArray1.S.t
end