12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667(** A wrapper for holding Postgres types *)moduletypeS=sig(** [v] is opaque because the exact contents depend on Postgres types, so you could have two [v]'s with the
same value but different internal data representation, for example if you did a [SELECT 'a'::bytea] vs
[SELECT 'a'::varchar], the internal representation will be different, but the actual data if you use
[to_binary] or [to_string] will be the same. *)typev[@@derivingcompare,sexp_of]typet=voption[@@derivingcompare,sexp_of]exceptionConversion_failureofstring[@@derivingsexp_of]valrequired:('a->'b)->'aoption->'bvalopt:('a->t)->'aoption->tvalnull:tvalof_binary:string->tvalto_binary_exn:t->stringvalto_binary:t->stringoptionvalof_bool:bool->tvalto_bool_exn:t->boolvalto_bool:t->booloptionvalof_float:float->tvalto_float_exn:t->floatvalto_float:t->floatoptiontypehstore=(string*stringoption)list[@@derivingcompare,sexp_of]valof_hstore:hstore->tvalto_hstore_exn:t->hstorevalto_hstore:t->hstoreoptiontypeinet=Ipaddr.t*int[@@derivingcompare,sexp_of]valof_inet:inet->tvalto_inet_exn:t->inetvalto_inet:t->inetoptionvalof_int:int->tvalto_int_exn:t->intvalto_int:t->intoptionvalof_int32:int32->tvalto_int32_exn:t->int32valto_int32:t->int32optionvalof_int64:int64->tvalto_int64_exn:t->int64valto_int64:t->int64optionvalof_list:tlist->tvalto_list_exn:t->tlistvalto_list:t->tlistoptiontypepoint=float*float[@@derivingcompare,sexp_of]valof_point:point->tvalto_point_exn:t->pointvalto_point:t->pointoptionvalof_string:string->tvalto_string_exn:t->stringvalto_string:t->stringoptionvalunit:tvalto_unit_exn:t->unitvalto_unit:t->unitoptiontypeuuid=Uuidm.t[@@derivingcompare,sexp_of]valof_uuid:uuid->tvalto_uuid_exn:t->uuidvalto_uuid:t->uuidoptionend