123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545(******************************************************************************)(* _ __ * The Kappa Language *)(* | |/ / * Copyright 2010-2020 CNRS - Harvard Medical School - INRIA - IRIF *)(* | ' / *********************************************************************)(* | . \ * This file is distributed under the terms of the *)(* |_|\_\ * GNU Lesser General Public License Version 3 *)(******************************************************************************)letinitial_buffer_size=0x1000letwrite_to_channelfdx=letb=Buffer.createinitial_buffer_sizeinlet()=fbxinBuffer.output_bufferdbletstring_of_writef?(len=1024)x=letob=Buffer.createleninlet()=fobxinBuffer.contentsobletread_of_stringfx=letlex_st=Yojson.Basic.init_lexer()inletlex_buf=Lexing.from_stringxinflex_stlex_bufletread_between_spacesflex_stlex_buf=let()=Yojson.Basic.read_spacelex_stlex_bufinletx=flex_stlex_bufinlet()=Yojson.Basic.read_spacelex_stlex_bufinxletread_next_itemfstb=let()=Yojson.Basic.read_commastbinread_between_spacesfstbletbuild_msgs="Not a correct "^sletof_string(s:string)=`Stringsletto_string?(error_msg=build_msg"string")=function|`String(s:string)->s|x->raise(Yojson.Basic.Util.Type_error(error_msg,x))letof_int(s:int)=`Intsletto_int?(error_msg=build_msg"int")=function|`Int(s:int)->s|x->raise(Yojson.Basic.Util.Type_error(error_msg,x))letof_bool(s:bool)=`String(ifsthen"true"else"false")letto_bool?(error_msg=build_msg"boolean")=function|`String"true"->true|`String"false"->false|x->raise(Yojson.Basic.Util.Type_error(error_msg,x))letof_unit()=`Nullletto_unit?(error_msg=build_msg"unit")=function|`Null->()|x->raise(Yojson.Basic.Util.Type_error(error_msg,x))letof_optionto_json=function|None->`Null|Somex->(matchto_jsonxwith|`Null->failwith"ambiguous JsonUtil.of_option"|x->x)letto_option=Yojson.Basic.Util.to_optionletwrite_optionfob=function|None->Yojson.Basic.write_nullob()|Somex->fobxletread_optionfplb=ifYojson.Basic.read_null_if_possibleplbthenNoneelseSome(fplb)letof_listto_jsonl=`List(List.rev_mapto_json(List.revl))letto_list?(error_msg=build_msg"list")of_json=function|`Listlasx->(tryList.rev_mapof_json(List.revl)withNot_found->raise(Yojson.Basic.Util.Type_error(error_msg,x)))|`Null->[]|x->raise(Yojson.Basic.Util.Type_error(error_msg,x))letwrite_commaob=Buffer.add_charob','letreciter2f_eltx=function|[]->()|y::l->write_commax;f_eltxy;iter2f_eltxlletwrite_listfobl=let()=Buffer.add_charob'['inlet()=matchlwith|[]->()|y::l->foby;iter2foblinBuffer.add_charob']'letof_arrayto_jsona=`List(Array.fold_right(funxacc->to_jsonx::acc)a[])letto_array?(error_msg=build_msg"array")of_json=function|`Listl->Tools.array_map_of_listof_jsonl|`Null->[||]|x->raise(Yojson.Basic.Util.Type_error(error_msg,x))letwrite_arrayfobl=let()=Buffer.add_charob'['inlet()=ifArray.lengthl>0thenfobl.(0)inlet()=Tools.iteri(funi->let()=write_commaobinfobl.(succi))(pred(Array.lengthl))inBuffer.add_charob']'letreciter_seqob=function|[]->()|f::q->let()=write_commaobinlet()=fobiniter_seqobqletwrite_sequenceobl=let()=Buffer.add_charob'['inlet()=matchlwith|[]->()|f::q->let()=fobiniter_seqobqinBuffer.add_charob']'letread_variantread_idreadstb=let()=Yojson.Basic.read_lbrstbinletcst=read_between_spacesread_idstbinletout=readstbcstinlet()=Yojson.Basic.read_rbrstbinoutletsmart_assocl=`Assoc(List.rev(List.fold_left(funacc->function|_,(`Null|`Assoc[]|`List[])->acc|x->x::acc)[]l))letof_assocto_jsonl=`Assoc(List.rev_mapto_json(List.revl))letto_assoc?(error_msg=build_msg"association")of_jsonjson=matchjsonwith|`Assoclasx->(tryList.rev_mapof_json(List.revl)withNot_found->raise(Yojson.Basic.Util.Type_error(error_msg,x)))|`Null->[]|x->raise(Yojson.Basic.Util.Type_error(error_msg,x))letwrite_fieldnafobx=let()=Yojson.Basic.write_stringobnainlet()=Buffer.add_charob':'infobxletof_pair?(lab1="first")?(lab2="second")to_json1to_json2(a,b)=`Assoc[lab1,to_json1a;lab2,to_json2b]letto_triple?(lab1="first")?(lab2="second")?(lab3="third")?(error_msg=build_msg"triple")of_json1of_json2of_json3=function|`AssoclasxwhenList.lengthl=3->(try(of_json1(List.assoclab1l),of_json2(List.assoclab2l),of_json3(List.assoclab3l))withNot_found->raise(Yojson.Basic.Util.Type_error(error_msg,x)))|x->raise(Yojson.Basic.Util.Type_error(error_msg,x))letof_triple?(lab1="first")?(lab2="second")?(lab3="third")to_json1to_json2to_json3(a,b,c)=`Assoc[lab1,to_json1a;lab2,to_json2b;lab3,to_json3c]letto_pair?(lab1="first")?(lab2="second")?(error_msg=build_msg"pair")of_json1of_json2=function|`AssoclasxwhenList.lengthl=2->(tryof_json1(List.assoclab1l),of_json2(List.assoclab2l)withNot_found->raise(Yojson.Basic.Util.Type_error(error_msg,x)))|x->raise(Yojson.Basic.Util.Type_error(error_msg,x))letwrite_compact_pairfgob(x,y)=let()=Buffer.add_charob'['inlet()=fobxinlet()=write_commaobinlet()=gobyinBuffer.add_charob']'letread_compact_pairfgstb=let()=Yojson.Basic.read_lbrstbinletx=read_between_spacesfstbinlet()=Yojson.Basic.read_commastbinlety=read_between_spacesgstbinlet()=Yojson.Basic.read_rbrstbinx,yletcompact_to_pairfg=function|`List[x;y]->fx,gy|x->raise(Yojson.Basic.Util.Type_error("Not a compact pair",x))letof_map?(lab_key="key")?(lab_value="value")~foldkey_to_jsonvalue_to_jsonmap=`List(List.rev(fold(fun(key:'key)(value:'value)(list:Yojson.Basic.tlist)->`Assoc[lab_key,key_to_jsonkey;lab_value,value_to_jsonvalue]::list)map[]))letto_map?(lab_key="key")?(lab_value="value")?(error_msg=build_msg"map")~add~emptyjson_to_keyjson_to_value=function|`Listl->List.fold_left(funmapx->matchxwith|`AssoclasxwhenList.lengthl=2->(tryadd(json_to_key(List.assoclab_keyl))(json_to_value(List.assoclab_valuel))mapwithNot_found->raise(Yojson.Basic.Util.Type_error(error_msg,x)))|x->raise(Yojson.Basic.Util.Type_error(error_msg,x)))emptyl|x->raise(Yojson.Basic.Util.Type_error(error_msg,x))letof_unix_label=function|UnixLabels.E2BIG->`Assoc["E2BIG",`Null]|UnixLabels.EACCES->`Assoc["EACCES",`Null]|UnixLabels.EAGAIN->`Assoc["EAGAIN",`Null]|UnixLabels.EBADF->`Assoc["EBADF",`Null]|UnixLabels.EBUSY->`Assoc["EBUSY",`Null]|UnixLabels.ECHILD->`Assoc["ECHILD",`Null]|UnixLabels.EDEADLK->`Assoc["EDEADLK",`Null]|UnixLabels.EDOM->`Assoc["EDOM",`Null]|UnixLabels.EEXIST->`Assoc["EEXIST",`Null]|UnixLabels.EFAULT->`Assoc["EFAULT",`Null]|UnixLabels.EFBIG->`Assoc["EFBIG",`Null]|UnixLabels.EINTR->`Assoc["EINTR",`Null]|UnixLabels.EINVAL->`Assoc["EINVAL",`Null]|UnixLabels.EIO->`Assoc["EIO",`Null]|UnixLabels.EISDIR->`Assoc["EISDIR",`Null]|UnixLabels.EMFILE->`Assoc["EMFILE",`Null]|UnixLabels.EMLINK->`Assoc["EMLINK",`Null]|UnixLabels.ENAMETOOLONG->`Assoc["ENAMETOOLONG",`Null]|UnixLabels.ENFILE->`Assoc["ENFILE",`Null]|UnixLabels.ENODEV->`Assoc["ENODEV",`Null]|UnixLabels.ENOENT->`Assoc["ENOENT",`Null]|UnixLabels.ENOEXEC->`Assoc["ENOEXEC",`Null]|UnixLabels.ENOLCK->`Assoc["ENOLCK",`Null]|UnixLabels.ENOMEM->`Assoc["ENOMEM",`Null]|UnixLabels.ENOSPC->`Assoc["ENOSPC",`Null]|UnixLabels.ENOSYS->`Assoc["ENOSYS",`Null]|UnixLabels.ENOTDIR->`Assoc["ENOTDIR",`Null]|UnixLabels.ENOTEMPTY->`Assoc["ENOTEMPTY",`Null]|UnixLabels.ENOTTY->`Assoc["ENOTTY",`Null]|UnixLabels.ENXIO->`Assoc["ENXIO",`Null]|UnixLabels.EPERM->`Assoc["EPERM",`Null]|UnixLabels.EPIPE->`Assoc["EPIPE",`Null]|UnixLabels.ERANGE->`Assoc["ERANGE",`Null]|UnixLabels.EROFS->`Assoc["EROFS",`Null]|UnixLabels.ESPIPE->`Assoc["ESPIPE",`Null]|UnixLabels.ESRCH->`Assoc["ESRCH",`Null]|UnixLabels.EXDEV->`Assoc["EXDEV",`Null]|UnixLabels.EWOULDBLOCK->`Assoc["EWOULDBLOCK",`Null]|UnixLabels.EINPROGRESS->`Assoc["EINPROGRESS",`Null]|UnixLabels.EALREADY->`Assoc["EALREADY",`Null]|UnixLabels.ENOTSOCK->`Assoc["ENOTSOCK",`Null]|UnixLabels.EDESTADDRREQ->`Assoc["EDESTADDRREQ",`Null]|UnixLabels.EMSGSIZE->`Assoc["EMSGSIZE",`Null]|UnixLabels.EPROTOTYPE->`Assoc["EPROTOTYPE",`Null]|UnixLabels.ENOPROTOOPT->`Assoc["ENOPROTOOPT",`Null]|UnixLabels.EPROTONOSUPPORT->`Assoc["EPROTONOSUPPORT",`Null]|UnixLabels.ESOCKTNOSUPPORT->`Assoc["ESOCKTNOSUPPORT",`Null]|UnixLabels.EOPNOTSUPP->`Assoc["EOPNOTSUPP",`Null]|UnixLabels.EPFNOSUPPORT->`Assoc["EPFNOSUPPORT",`Null]|UnixLabels.EAFNOSUPPORT->`Assoc["EAFNOSUPPORT",`Null]|UnixLabels.EADDRINUSE->`Assoc["EADDRINUSE",`Null]|UnixLabels.EADDRNOTAVAIL->`Assoc["EADDRNOTAVAIL",`Null]|UnixLabels.ENETDOWN->`Assoc["ENETDOWN",`Null]|UnixLabels.ENETUNREACH->`Assoc["ENETUNREACH",`Null]|UnixLabels.ENETRESET->`Assoc["ENETRESET",`Null]|UnixLabels.ECONNABORTED->`Assoc["ECONNABORTED",`Null]|UnixLabels.ECONNRESET->`Assoc["ECONNRESET",`Null]|UnixLabels.ENOBUFS->`Assoc["ENOBUFS",`Null]|UnixLabels.EISCONN->`Assoc["EISCONN",`Null]|UnixLabels.ENOTCONN->`Assoc["ENOTCONN",`Null]|UnixLabels.ESHUTDOWN->`Assoc["ESHUTDOWN",`Null]|UnixLabels.ETOOMANYREFS->`Assoc["ETOOMANYREFS",`Null]|UnixLabels.ETIMEDOUT->`Assoc["ETIMEDOUT",`Null]|UnixLabels.ECONNREFUSED->`Assoc["ECONNREFUSED",`Null]|UnixLabels.EHOSTDOWN->`Assoc["EHOSTDOWN",`Null]|UnixLabels.EHOSTUNREACH->`Assoc["EHOSTUNREACH",`Null]|UnixLabels.ELOOP->`Assoc["ELOOP",`Null]|UnixLabels.EOVERFLOW->`Assoc["EOVERFLOW",`Null]|UnixLabels.EUNKNOWNERRint->`Assoc["EUNKNOWNERR",of_intint]let(to_unix_label:Yojson.Basic.t->UnixLabels.error)=function|`Assoc[("E2BIG",`Null)]->UnixLabels.E2BIG|`Assoc[("EACCES",`Null)]->UnixLabels.EACCES|`Assoc[("EAGAIN",`Null)]->UnixLabels.EAGAIN|`Assoc[("EBADF",`Null)]->UnixLabels.EBADF|`Assoc[("EBUSY",`Null)]->UnixLabels.EBUSY|`Assoc[("ECHILD",`Null)]->UnixLabels.ECHILD|`Assoc[("EDEADLK",`Null)]->UnixLabels.EDEADLK|`Assoc[("EDOM",`Null)]->UnixLabels.EDOM|`Assoc[("EEXIST",`Null)]->UnixLabels.EEXIST|`Assoc[("EFAULT",`Null)]->UnixLabels.EFAULT|`Assoc[("EFBIG",`Null)]->UnixLabels.EFBIG|`Assoc[("EINTR",`Null)]->UnixLabels.EINTR|`Assoc[("EINVAL",`Null)]->UnixLabels.EINVAL|`Assoc[("EIO",`Null)]->UnixLabels.EIO|`Assoc[("EISDIR",`Null)]->UnixLabels.EISDIR|`Assoc[("EMFILE",`Null)]->UnixLabels.EMFILE|`Assoc[("EMLINK",`Null)]->UnixLabels.EMLINK|`Assoc[("ENAMETOOLONG",`Null)]->UnixLabels.ENAMETOOLONG|`Assoc[("ENFILE",`Null)]->UnixLabels.ENFILE|`Assoc[("ENODEV",`Null)]->UnixLabels.ENODEV|`Assoc[("ENOENT",`Null)]->UnixLabels.ENOENT|`Assoc[("ENOEXEC",`Null)]->UnixLabels.ENOEXEC|`Assoc[("ENOLCK",`Null)]->UnixLabels.ENOLCK|`Assoc[("ENOMEM",`Null)]->UnixLabels.ENOMEM|`Assoc[("ENOSPC",`Null)]->UnixLabels.ENOSPC|`Assoc[("ENOSYS",`Null)]->UnixLabels.ENOSYS|`Assoc[("ENOTDIR",`Null)]->UnixLabels.ENOTDIR|`Assoc[("ENOTEMPTY",`Null)]->UnixLabels.ENOTEMPTY|`Assoc[("ENOTTY",`Null)]->UnixLabels.ENOTTY|`Assoc[("ENXIO",`Null)]->UnixLabels.ENXIO|`Assoc[("EPERM",`Null)]->UnixLabels.EPERM|`Assoc[("EPIPE",`Null)]->UnixLabels.EPIPE|`Assoc[("ERANGE",`Null)]->UnixLabels.ERANGE|`Assoc[("EROFS",`Null)]->UnixLabels.EROFS|`Assoc[("ESPIPE",`Null)]->UnixLabels.ESPIPE|`Assoc[("ESRCH",`Null)]->UnixLabels.ESRCH|`Assoc[("EXDEV",`Null)]->UnixLabels.EXDEV|`Assoc[("EWOULDBLOCK",`Null)]->UnixLabels.EWOULDBLOCK|`Assoc[("EINPROGRESS",`Null)]->UnixLabels.EINPROGRESS|`Assoc[("EALREADY",`Null)]->UnixLabels.EALREADY|`Assoc[("ENOTSOCK",`Null)]->UnixLabels.ENOTSOCK|`Assoc[("EDESTADDRREQ",`Null)]->UnixLabels.EDESTADDRREQ|`Assoc[("EMSGSIZE",`Null)]->UnixLabels.EMSGSIZE|`Assoc[("EPROTOTYPE",`Null)]->UnixLabels.EPROTOTYPE|`Assoc[("ENOPROTOOPT",`Null)]->UnixLabels.ENOPROTOOPT|`Assoc[("EPROTONOSUPPORT",`Null)]->UnixLabels.EPROTONOSUPPORT|`Assoc[("ESOCKTNOSUPPORT",`Null)]->UnixLabels.ESOCKTNOSUPPORT|`Assoc[("EOPNOTSUPP",`Null)]->UnixLabels.EOPNOTSUPP|`Assoc[("EPFNOSUPPORT",`Null)]->UnixLabels.EPFNOSUPPORT|`Assoc[("EAFNOSUPPORT",`Null)]->UnixLabels.EAFNOSUPPORT|`Assoc[("EADDRINUSE",`Null)]->UnixLabels.EADDRINUSE|`Assoc[("EADDRNOTAVAIL",`Null)]->UnixLabels.EADDRNOTAVAIL|`Assoc[("ENETDOWN",`Null)]->UnixLabels.ENETDOWN|`Assoc[("ENETUNREACH",`Null)]->UnixLabels.ENETUNREACH|`Assoc[("ENETRESET",`Null)]->UnixLabels.ENETRESET|`Assoc[("ECONNABORTED",`Null)]->UnixLabels.ECONNABORTED|`Assoc[("ECONNRESET",`Null)]->UnixLabels.ECONNRESET|`Assoc[("ENOBUFS",`Null)]->UnixLabels.ENOBUFS|`Assoc[("EISCONN",`Null)]->UnixLabels.EISCONN|`Assoc[("ENOTCONN",`Null)]->UnixLabels.ENOTCONN|`Assoc[("ESHUTDOWN",`Null)]->UnixLabels.ESHUTDOWN|`Assoc[("ETOOMANYREFS",`Null)]->UnixLabels.ETOOMANYREFS|`Assoc[("ETIMEDOUT",`Null)]->UnixLabels.ETIMEDOUT|`Assoc[("ECONNREFUSED",`Null)]->UnixLabels.ECONNREFUSED|`Assoc[("EHOSTDOWN",`Null)]->UnixLabels.EHOSTDOWN|`Assoc[("EHOSTUNREACH",`Null)]->UnixLabels.EHOSTUNREACH|`Assoc[("ELOOP",`Null)]->UnixLabels.ELOOP|`Assoc[("EOVERFLOW",`Null)]->UnixLabels.EOVERFLOW|`Assoc[("EUNKNOWNERR",int)]->UnixLabels.EUNKNOWNERR(to_intint)|x->raise(Yojson.Basic.Util.Type_error(build_msg"unix labels error",x))letof_unix_error=function|Unix.E2BIG->`Assoc["E2BIG",`Null]|Unix.EACCES->`Assoc["EACCES",`Null]|Unix.EAGAIN->`Assoc["EAGAIN",`Null]|Unix.EBADF->`Assoc["EBADF",`Null]|Unix.EBUSY->`Assoc["EBUSY",`Null]|Unix.ECHILD->`Assoc["ECHILD",`Null]|Unix.EDEADLK->`Assoc["EDEADLK",`Null]|Unix.EDOM->`Assoc["EDOM",`Null]|Unix.EEXIST->`Assoc["EEXIST",`Null]|Unix.EFAULT->`Assoc["EFAULT",`Null]|Unix.EFBIG->`Assoc["EFBIG",`Null]|Unix.EINTR->`Assoc["EINTR",`Null]|Unix.EINVAL->`Assoc["EINVAL",`Null]|Unix.EIO->`Assoc["EIO",`Null]|Unix.EISDIR->`Assoc["EISDIR",`Null]|Unix.EMFILE->`Assoc["EMFILE",`Null]|Unix.EMLINK->`Assoc["EMLINK",`Null]|Unix.ENAMETOOLONG->`Assoc["ENAMETOOLONG",`Null]|Unix.ENFILE->`Assoc["ENFILE",`Null]|Unix.ENODEV->`Assoc["ENODEV",`Null]|Unix.ENOENT->`Assoc["ENOENT",`Null]|Unix.ENOEXEC->`Assoc["ENOEXEC",`Null]|Unix.ENOLCK->`Assoc["ENOLCK",`Null]|Unix.ENOMEM->`Assoc["ENOMEM",`Null]|Unix.ENOSPC->`Assoc["ENOSPC",`Null]|Unix.ENOSYS->`Assoc["ENOSYS",`Null]|Unix.ENOTDIR->`Assoc["ENOTDIR",`Null]|Unix.ENOTEMPTY->`Assoc["ENOTEMPTY",`Null]|Unix.ENOTTY->`Assoc["ENOTTY",`Null]|Unix.ENXIO->`Assoc["ENXIO",`Null]|Unix.EPERM->`Assoc["EPERM",`Null]|Unix.EPIPE->`Assoc["EPIPE",`Null]|Unix.ERANGE->`Assoc["ERANGE",`Null]|Unix.EROFS->`Assoc["EROFS",`Null]|Unix.ESPIPE->`Assoc["ESPIPE",`Null]|Unix.ESRCH->`Assoc["ESRCH",`Null]|Unix.EXDEV->`Assoc["EXDEV",`Null]|Unix.EWOULDBLOCK->`Assoc["EWOULDBLOCK",`Null]|Unix.EINPROGRESS->`Assoc["EINPROGRESS",`Null]|Unix.EALREADY->`Assoc["EALREADY",`Null]|Unix.ENOTSOCK->`Assoc["ENOTSOCK",`Null]|Unix.EDESTADDRREQ->`Assoc["EDESTADDRREQ",`Null]|Unix.EMSGSIZE->`Assoc["EMSGSIZE",`Null]|Unix.EPROTOTYPE->`Assoc["EPROTOTYPE",`Null]|Unix.ENOPROTOOPT->`Assoc["ENOPROTOOPT",`Null]|Unix.EPROTONOSUPPORT->`Assoc["EPROTONOSUPPORT",`Null]|Unix.ESOCKTNOSUPPORT->`Assoc["ESOCKTNOSUPPORT",`Null]|Unix.EOPNOTSUPP->`Assoc["EOPNOTSUPP",`Null]|Unix.EPFNOSUPPORT->`Assoc["EPFNOSUPPORT",`Null]|Unix.EAFNOSUPPORT->`Assoc["EAFNOSUPPORT",`Null]|Unix.EADDRINUSE->`Assoc["EADDRINUSE",`Null]|Unix.EADDRNOTAVAIL->`Assoc["EADDRNOTAVAIL",`Null]|Unix.ENETDOWN->`Assoc["ENETDOWN",`Null]|Unix.ENETUNREACH->`Assoc["ENETUNREACH",`Null]|Unix.ENETRESET->`Assoc["ENETRESET",`Null]|Unix.ECONNABORTED->`Assoc["ECONNABORTED",`Null]|Unix.ECONNRESET->`Assoc["ECONNRESET",`Null]|Unix.ENOBUFS->`Assoc["ENOBUFS",`Null]|Unix.EISCONN->`Assoc["EISCONN",`Null]|Unix.ENOTCONN->`Assoc["ENOTCONN",`Null]|Unix.ESHUTDOWN->`Assoc["ESHUTDOWN",`Null]|Unix.ETOOMANYREFS->`Assoc["ETOOMANYREFS",`Null]|Unix.ETIMEDOUT->`Assoc["ETIMEDOUT",`Null]|Unix.ECONNREFUSED->`Assoc["ECONNREFUSED",`Null]|Unix.EHOSTDOWN->`Assoc["EHOSTDOWN",`Null]|Unix.EHOSTUNREACH->`Assoc["EHOSTUNREACH",`Null]|Unix.ELOOP->`Assoc["ELOOP",`Null]|Unix.EOVERFLOW->`Assoc["EOVERFLOW",`Null]|Unix.EUNKNOWNERRint->`Assoc["EUNKNOWNERR",of_intint]let(to_unix_error:Yojson.Basic.t->Unix.error)=function|`Assoc[("E2BIG",`Null)]->Unix.E2BIG|`Assoc[("EACCES",`Null)]->Unix.EACCES|`Assoc[("EAGAIN",`Null)]->Unix.EAGAIN|`Assoc[("EBADF",`Null)]->Unix.EBADF|`Assoc[("EBUSY",`Null)]->Unix.EBUSY|`Assoc[("ECHILD",`Null)]->Unix.ECHILD|`Assoc[("EDEADLK",`Null)]->Unix.EDEADLK|`Assoc[("EDOM",`Null)]->Unix.EDOM|`Assoc[("EEXIST",`Null)]->Unix.EEXIST|`Assoc[("EFAULT",`Null)]->Unix.EFAULT|`Assoc[("EFBIG",`Null)]->Unix.EFBIG|`Assoc[("EINTR",`Null)]->Unix.EINTR|`Assoc[("EINVAL",`Null)]->Unix.EINVAL|`Assoc[("EIO",`Null)]->Unix.EIO|`Assoc[("EISDIR",`Null)]->Unix.EISDIR|`Assoc[("EMFILE",`Null)]->Unix.EMFILE|`Assoc[("EMLINK",`Null)]->Unix.EMLINK|`Assoc[("ENAMETOOLONG",`Null)]->Unix.ENAMETOOLONG|`Assoc[("ENFILE",`Null)]->Unix.ENFILE|`Assoc[("ENODEV",`Null)]->Unix.ENODEV|`Assoc[("ENOENT",`Null)]->Unix.ENOENT|`Assoc[("ENOEXEC",`Null)]->Unix.ENOEXEC|`Assoc[("ENOLCK",`Null)]->Unix.ENOLCK|`Assoc[("ENOMEM",`Null)]->Unix.ENOMEM|`Assoc[("ENOSPC",`Null)]->Unix.ENOSPC|`Assoc[("ENOSYS",`Null)]->Unix.ENOSYS|`Assoc[("ENOTDIR",`Null)]->Unix.ENOTDIR|`Assoc[("ENOTEMPTY",`Null)]->Unix.ENOTEMPTY|`Assoc[("ENOTTY",`Null)]->Unix.ENOTTY|`Assoc[("ENXIO",`Null)]->Unix.ENXIO|`Assoc[("EPERM",`Null)]->Unix.EPERM|`Assoc[("EPIPE",`Null)]->Unix.EPIPE|`Assoc[("ERANGE",`Null)]->Unix.ERANGE|`Assoc[("EROFS",`Null)]->Unix.EROFS|`Assoc[("ESPIPE",`Null)]->Unix.ESPIPE|`Assoc[("ESRCH",`Null)]->Unix.ESRCH|`Assoc[("EXDEV",`Null)]->Unix.EXDEV|`Assoc[("EWOULDBLOCK",`Null)]->Unix.EWOULDBLOCK|`Assoc[("EINPROGRESS",`Null)]->Unix.EINPROGRESS|`Assoc[("EALREADY",`Null)]->Unix.EALREADY|`Assoc[("ENOTSOCK",`Null)]->Unix.ENOTSOCK|`Assoc[("EDESTADDRREQ",`Null)]->Unix.EDESTADDRREQ|`Assoc[("EMSGSIZE",`Null)]->Unix.EMSGSIZE|`Assoc[("EPROTOTYPE",`Null)]->Unix.EPROTOTYPE|`Assoc[("ENOPROTOOPT",`Null)]->Unix.ENOPROTOOPT|`Assoc[("EPROTONOSUPPORT",`Null)]->Unix.EPROTONOSUPPORT|`Assoc[("ESOCKTNOSUPPORT",`Null)]->Unix.ESOCKTNOSUPPORT|`Assoc[("EOPNOTSUPP",`Null)]->Unix.EOPNOTSUPP|`Assoc[("EPFNOSUPPORT",`Null)]->Unix.EPFNOSUPPORT|`Assoc[("EAFNOSUPPORT",`Null)]->Unix.EAFNOSUPPORT|`Assoc[("EADDRINUSE",`Null)]->Unix.EADDRINUSE|`Assoc[("EADDRNOTAVAIL",`Null)]->Unix.EADDRNOTAVAIL|`Assoc[("ENETDOWN",`Null)]->Unix.ENETDOWN|`Assoc[("ENETUNREACH",`Null)]->Unix.ENETUNREACH|`Assoc[("ENETRESET",`Null)]->Unix.ENETRESET|`Assoc[("ECONNABORTED",`Null)]->Unix.ECONNABORTED|`Assoc[("ECONNRESET",`Null)]->Unix.ECONNRESET|`Assoc[("ENOBUFS",`Null)]->Unix.ENOBUFS|`Assoc[("EISCONN",`Null)]->Unix.EISCONN|`Assoc[("ENOTCONN",`Null)]->Unix.ENOTCONN|`Assoc[("ESHUTDOWN",`Null)]->Unix.ESHUTDOWN|`Assoc[("ETOOMANYREFS",`Null)]->Unix.ETOOMANYREFS|`Assoc[("ETIMEDOUT",`Null)]->Unix.ETIMEDOUT|`Assoc[("ECONNREFUSED",`Null)]->Unix.ECONNREFUSED|`Assoc[("EHOSTDOWN",`Null)]->Unix.EHOSTDOWN|`Assoc[("EHOSTUNREACH",`Null)]->Unix.EHOSTUNREACH|`Assoc[("ELOOP",`Null)]->Unix.ELOOP|`Assoc[("EOVERFLOW",`Null)]->Unix.EOVERFLOW|`Assoc[("EUNKNOWNERR",int)]->Unix.EUNKNOWNERR(to_intint)|x->raise(Yojson.Basic.Util.Type_error(build_msg"unix error",x))letstd_json_string_of_floatx=letob=Buffer.create20inYojson.Basic.write_std_floatobx;Buffer.contentsob