--A while ago, I made a module which basically extended bigarrays with a few more functions. However, I wanted to have a distinction between read-only and read-write values. The equivalence with bigarrays was irrelevant, so my interface just looked like this:type rotype rwtype 'a tval read_only : 'a t -> ro tval get : 'a t -> int -> intval put : rw t -> int -> int -> unit...Basically, any function that wrote to the type would have to take a "rw t", but anything else would take " 'a t". From what I know about C, "ro" behaves like the "const" qualifier - not water-proof but it catches some of my common mistakes.Now, however, I want to re-export the equivalence between 'a t and bigarrays (mostly for the .{} operator), but also have the read-only/read-write distinction. The problem is that if I write:type 'a t = (int, int8_unsigned_elt, c_layout) Array1.tthen OCaml will see that "ro t" and "rw t" are the same and freely let me use "ro t" values in, for example, the "put" function above.To summarize, is there a way to make two types internally represented by bigarrays, the first of which:* can use the bigarray functions (specifically .{} )* can use all of my new functionsand the second type* can't use bigarray functions* can only use a subset of my new functionsI don't want to have two different versions of each function that I have to keep track of.Thanks,Reed Wilsonç