sig
  module Exit : Module_type.Exit
  module Exit_or_signal : Module_type.Exit_or_signal
  module Exit_or_signal_or_stop : Module_type.Exit_or_signal_or_stop
  val system : string -> Exit_or_signal.t Import.Deferred.t
  val system_exn : string -> unit Import.Deferred.t
  val getpid : unit -> Core.Std.Pid.t
  val getppid : unit -> Core.Std.Pid.t option
  val getppid_exn : unit -> Core.Std.Pid.t
  val this_process_became_child_of_init :
    ?poll_delay:Core.Std.Time.Span.t -> unit -> unit Import.Deferred.t
  val nice : int -> int
  val cores : (unit -> int Import.Deferred.t) Core.Std.Or_error.t
  type open_flag =
      [ `Append
      | `Creat
      | `Dsync
      | `Excl
      | `Noctty
      | `Nonblock
      | `Rdonly
      | `Rdwr
      | `Rsync
      | `Sync
      | `Trunc
      | `Wronly ]
  type file_perm = int
  val openfile :
    ?perm:Unix_syscalls.file_perm ->
    string -> mode:Unix_syscalls.open_flag list -> Fd.t Import.Deferred.t
  val with_file :
    ?exclusive:[ `Read | `Write ] ->
    ?perm:Unix_syscalls.file_perm ->
    string ->
    mode:Unix_syscalls.open_flag list ->
    f:(Fd.t -> 'Import.Deferred.t) -> 'Import.Deferred.t
  val close : Fd.t -> unit Import.Deferred.t
  val lseek :
    Fd.t -> int64 -> mode:[ `Cur | `End | `Set ] -> int64 Import.Deferred.t
  val truncate : string -> len:int64 -> unit Import.Deferred.t
  val ftruncate : Fd.t -> len:int64 -> unit Import.Deferred.t
  val fsync : Fd.t -> unit Import.Deferred.t
  val fdatasync : Fd.t -> unit Import.Deferred.t
  val sync : unit -> unit Import.Deferred.t
  val lockf :
    ?len:Core.Std.Int64.t ->
    Fd.t -> [ `Read | `Write ] -> unit Import.Deferred.t
  val try_lockf : ?len:Core.Std.Int64.t -> Fd.t -> [ `Read | `Write ] -> bool
  val test_lockf : ?len:Core.Std.Int64.t -> Fd.t -> bool
  val unlockf : ?len:Core.Std.Int64.t -> Fd.t -> unit
  module File_kind :
    sig
      type t =
          [ `Block | `Char | `Directory | `Fifo | `File | `Link | `Socket ]
    end
  module Stats :
    sig
      type t = {
        dev : int;
        ino : int;
        kind : Unix_syscalls.File_kind.t;
        perm : Unix_syscalls.file_perm;
        nlink : int;
        uid : int;
        gid : int;
        rdev : int;
        size : int64;
        atime : Core.Std.Time.t;
        mtime : Core.Std.Time.t;
        ctime : Core.Std.Time.t;
      }
      val sexp_of_t : Unix_syscalls.Stats.t -> Sexplib.Sexp.t
      val t_of_sexp : Sexplib.Sexp.t -> Unix_syscalls.Stats.t
      val ctime : Unix_syscalls.Stats.t -> Core.Std.Time.t
      val mtime : Unix_syscalls.Stats.t -> Core.Std.Time.t
      val atime : Unix_syscalls.Stats.t -> Core.Std.Time.t
      val size : Unix_syscalls.Stats.t -> int64
      val rdev : Unix_syscalls.Stats.t -> int
      val gid : Unix_syscalls.Stats.t -> int
      val uid : Unix_syscalls.Stats.t -> int
      val nlink : Unix_syscalls.Stats.t -> int
      val perm : Unix_syscalls.Stats.t -> Unix_syscalls.file_perm
      val kind : Unix_syscalls.Stats.t -> Unix_syscalls.File_kind.t
      val ino : Unix_syscalls.Stats.t -> int
      val dev : Unix_syscalls.Stats.t -> int
      module Fields :
        sig
          val names : string list
          val ctime :
            (Unix_syscalls.Stats.t, Core.Std.Time.t) Fieldslib.Field.t
          val mtime :
            (Unix_syscalls.Stats.t, Core.Std.Time.t) Fieldslib.Field.t
          val atime :
            (Unix_syscalls.Stats.t, Core.Std.Time.t) Fieldslib.Field.t
          val size : (Unix_syscalls.Stats.t, int64) Fieldslib.Field.t
          val rdev : (Unix_syscalls.Stats.t, int) Fieldslib.Field.t
          val gid : (Unix_syscalls.Stats.t, int) Fieldslib.Field.t
          val uid : (Unix_syscalls.Stats.t, int) Fieldslib.Field.t
          val nlink : (Unix_syscalls.Stats.t, int) Fieldslib.Field.t
          val perm :
            (Unix_syscalls.Stats.t, Unix_syscalls.file_perm)
            Fieldslib.Field.t
          val kind :
            (Unix_syscalls.Stats.t, Unix_syscalls.File_kind.t)
            Fieldslib.Field.t
          val ino : (Unix_syscalls.Stats.t, int) Fieldslib.Field.t
          val dev : (Unix_syscalls.Stats.t, int) Fieldslib.Field.t
          val fold :
            init:'acc__ ->
            dev:('acc__ ->
                 (Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> 'acc__) ->
            ino:('acc__ ->
                 (Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> 'acc__) ->
            kind:('acc__ ->
                  (Unix_syscalls.Stats.t, Unix_syscalls.File_kind.t)
                  Fieldslib.Field.t -> 'acc__) ->
            perm:('acc__ ->
                  (Unix_syscalls.Stats.t, Unix_syscalls.file_perm)
                  Fieldslib.Field.t -> 'acc__) ->
            nlink:('acc__ ->
                   (Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> 'acc__) ->
            uid:('acc__ ->
                 (Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> 'acc__) ->
            gid:('acc__ ->
                 (Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> 'acc__) ->
            rdev:('acc__ ->
                  (Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> 'acc__) ->
            size:('acc__ ->
                  (Unix_syscalls.Stats.t, int64) Fieldslib.Field.t -> 'acc__) ->
            atime:('acc__ ->
                   (Unix_syscalls.Stats.t, Core.Std.Time.t) Fieldslib.Field.t ->
                   'acc__) ->
            mtime:('acc__ ->
                   (Unix_syscalls.Stats.t, Core.Std.Time.t) Fieldslib.Field.t ->
                   'acc__) ->
            ctime:('acc__ ->
                   (Unix_syscalls.Stats.t, Core.Std.Time.t) Fieldslib.Field.t ->
                   'acc__) ->
            'acc__
          val make_creator :
            dev:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t ->
                 'compile_acc__ -> ('input__ -> int) * 'compile_acc__) ->
            ino:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t ->
                 'compile_acc__ -> ('input__ -> int) * 'compile_acc__) ->
            kind:((Unix_syscalls.Stats.t, Unix_syscalls.File_kind.t)
                  Fieldslib.Field.t ->
                  'compile_acc__ ->
                  ('input__ -> Unix_syscalls.File_kind.t) * 'compile_acc__) ->
            perm:((Unix_syscalls.Stats.t, Unix_syscalls.file_perm)
                  Fieldslib.Field.t ->
                  'compile_acc__ ->
                  ('input__ -> Unix_syscalls.file_perm) * 'compile_acc__) ->
            nlink:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t ->
                   'compile_acc__ -> ('input__ -> int) * 'compile_acc__) ->
            uid:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t ->
                 'compile_acc__ -> ('input__ -> int) * 'compile_acc__) ->
            gid:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t ->
                 'compile_acc__ -> ('input__ -> int) * 'compile_acc__) ->
            rdev:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t ->
                  'compile_acc__ -> ('input__ -> int) * 'compile_acc__) ->
            size:((Unix_syscalls.Stats.t, int64) Fieldslib.Field.t ->
                  'compile_acc__ -> ('input__ -> int64) * 'compile_acc__) ->
            atime:((Unix_syscalls.Stats.t, Core.Std.Time.t) Fieldslib.Field.t ->
                   'compile_acc__ ->
                   ('input__ -> Core.Std.Time.t) * 'compile_acc__) ->
            mtime:((Unix_syscalls.Stats.t, Core.Std.Time.t) Fieldslib.Field.t ->
                   'compile_acc__ ->
                   ('input__ -> Core.Std.Time.t) * 'compile_acc__) ->
            ctime:((Unix_syscalls.Stats.t, Core.Std.Time.t) Fieldslib.Field.t ->
                   'compile_acc__ ->
                   ('input__ -> Core.Std.Time.t) * 'compile_acc__) ->
            'compile_acc__ ->
            ('input__ -> Unix_syscalls.Stats.t) * 'compile_acc__
          val create :
            dev:int ->
            ino:int ->
            kind:Unix_syscalls.File_kind.t ->
            perm:Unix_syscalls.file_perm ->
            nlink:int ->
            uid:int ->
            gid:int ->
            rdev:int ->
            size:int64 ->
            atime:Core.Std.Time.t ->
            mtime:Core.Std.Time.t ->
            ctime:Core.Std.Time.t -> Unix_syscalls.Stats.t
          val iter :
            dev:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> unit) ->
            ino:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> unit) ->
            kind:((Unix_syscalls.Stats.t, Unix_syscalls.File_kind.t)
                  Fieldslib.Field.t -> unit) ->
            perm:((Unix_syscalls.Stats.t, Unix_syscalls.file_perm)
                  Fieldslib.Field.t -> unit) ->
            nlink:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> unit) ->
            uid:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> unit) ->
            gid:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> unit) ->
            rdev:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> unit) ->
            size:((Unix_syscalls.Stats.t, int64) Fieldslib.Field.t -> unit) ->
            atime:((Unix_syscalls.Stats.t, Core.Std.Time.t) Fieldslib.Field.t ->
                   unit) ->
            mtime:((Unix_syscalls.Stats.t, Core.Std.Time.t) Fieldslib.Field.t ->
                   unit) ->
            ctime:((Unix_syscalls.Stats.t, Core.Std.Time.t) Fieldslib.Field.t ->
                   unit) ->
            unit
          val map :
            dev:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> int) ->
            ino:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> int) ->
            kind:((Unix_syscalls.Stats.t, Unix_syscalls.File_kind.t)
                  Fieldslib.Field.t -> Unix_syscalls.File_kind.t) ->
            perm:((Unix_syscalls.Stats.t, Unix_syscalls.file_perm)
                  Fieldslib.Field.t -> Unix_syscalls.file_perm) ->
            nlink:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> int) ->
            uid:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> int) ->
            gid:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> int) ->
            rdev:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> int) ->
            size:((Unix_syscalls.Stats.t, int64) Fieldslib.Field.t -> int64) ->
            atime:((Unix_syscalls.Stats.t, Core.Std.Time.t) Fieldslib.Field.t ->
                   Core.Std.Time.t) ->
            mtime:((Unix_syscalls.Stats.t, Core.Std.Time.t) Fieldslib.Field.t ->
                   Core.Std.Time.t) ->
            ctime:((Unix_syscalls.Stats.t, Core.Std.Time.t) Fieldslib.Field.t ->
                   Core.Std.Time.t) ->
            Unix_syscalls.Stats.t
          val map_poly :
            (Unix_syscalls.Stats.t, 'x0) Fieldslib.Field.user -> 'x0 list
          val for_all :
            dev:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> bool) ->
            ino:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> bool) ->
            kind:((Unix_syscalls.Stats.t, Unix_syscalls.File_kind.t)
                  Fieldslib.Field.t -> bool) ->
            perm:((Unix_syscalls.Stats.t, Unix_syscalls.file_perm)
                  Fieldslib.Field.t -> bool) ->
            nlink:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> bool) ->
            uid:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> bool) ->
            gid:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> bool) ->
            rdev:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> bool) ->
            size:((Unix_syscalls.Stats.t, int64) Fieldslib.Field.t -> bool) ->
            atime:((Unix_syscalls.Stats.t, Core.Std.Time.t) Fieldslib.Field.t ->
                   bool) ->
            mtime:((Unix_syscalls.Stats.t, Core.Std.Time.t) Fieldslib.Field.t ->
                   bool) ->
            ctime:((Unix_syscalls.Stats.t, Core.Std.Time.t) Fieldslib.Field.t ->
                   bool) ->
            bool
          val exists :
            dev:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> bool) ->
            ino:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> bool) ->
            kind:((Unix_syscalls.Stats.t, Unix_syscalls.File_kind.t)
                  Fieldslib.Field.t -> bool) ->
            perm:((Unix_syscalls.Stats.t, Unix_syscalls.file_perm)
                  Fieldslib.Field.t -> bool) ->
            nlink:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> bool) ->
            uid:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> bool) ->
            gid:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> bool) ->
            rdev:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> bool) ->
            size:((Unix_syscalls.Stats.t, int64) Fieldslib.Field.t -> bool) ->
            atime:((Unix_syscalls.Stats.t, Core.Std.Time.t) Fieldslib.Field.t ->
                   bool) ->
            mtime:((Unix_syscalls.Stats.t, Core.Std.Time.t) Fieldslib.Field.t ->
                   bool) ->
            ctime:((Unix_syscalls.Stats.t, Core.Std.Time.t) Fieldslib.Field.t ->
                   bool) ->
            bool
          val to_list :
            dev:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> 'elem__) ->
            ino:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> 'elem__) ->
            kind:((Unix_syscalls.Stats.t, Unix_syscalls.File_kind.t)
                  Fieldslib.Field.t -> 'elem__) ->
            perm:((Unix_syscalls.Stats.t, Unix_syscalls.file_perm)
                  Fieldslib.Field.t -> 'elem__) ->
            nlink:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> 'elem__) ->
            uid:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> 'elem__) ->
            gid:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> 'elem__) ->
            rdev:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t -> 'elem__) ->
            size:((Unix_syscalls.Stats.t, int64) Fieldslib.Field.t -> 'elem__) ->
            atime:((Unix_syscalls.Stats.t, Core.Std.Time.t) Fieldslib.Field.t ->
                   'elem__) ->
            mtime:((Unix_syscalls.Stats.t, Core.Std.Time.t) Fieldslib.Field.t ->
                   'elem__) ->
            ctime:((Unix_syscalls.Stats.t, Core.Std.Time.t) Fieldslib.Field.t ->
                   'elem__) ->
            'elem__ list
          module Direct :
            sig
              val iter :
                Unix_syscalls.Stats.t ->
                dev:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t ->
                     Unix_syscalls.Stats.t -> int -> unit) ->
                ino:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t ->
                     Unix_syscalls.Stats.t -> int -> unit) ->
                kind:((Unix_syscalls.Stats.t, Unix_syscalls.File_kind.t)
                      Fieldslib.Field.t ->
                      Unix_syscalls.Stats.t ->
                      Unix_syscalls.File_kind.t -> unit) ->
                perm:((Unix_syscalls.Stats.t, Unix_syscalls.file_perm)
                      Fieldslib.Field.t ->
                      Unix_syscalls.Stats.t ->
                      Unix_syscalls.file_perm -> unit) ->
                nlink:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t ->
                       Unix_syscalls.Stats.t -> int -> unit) ->
                uid:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t ->
                     Unix_syscalls.Stats.t -> int -> unit) ->
                gid:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t ->
                     Unix_syscalls.Stats.t -> int -> unit) ->
                rdev:((Unix_syscalls.Stats.t, int) Fieldslib.Field.t ->
                      Unix_syscalls.Stats.t -> int -> unit) ->
                size:((Unix_syscalls.Stats.t, int64) Fieldslib.Field.t ->
                      Unix_syscalls.Stats.t -> int64 -> unit) ->
                atime:((Unix_syscalls.Stats.t, Core.Std.Time.t)
                       Fieldslib.Field.t ->
                       Unix_syscalls.Stats.t -> Core.Std.Time.t -> unit) ->
                mtime:((Unix_syscalls.Stats.t, Core.Std.Time.t)
                       Fieldslib.Field.t ->
                       Unix_syscalls.Stats.t -> Core.Std.Time.t -> unit) ->
                ctime:((Unix_syscalls.Stats.t, Core.Std.Time.t)
                       Fieldslib.Field.t ->
                       Unix_syscalls.Stats.t -> Core.Std.Time.t -> unit) ->
                unit
              val fold :
                Unix_syscalls.Stats.t ->
                init:'acc__ ->
                dev:('acc__ ->
                     (Unix_syscalls.Stats.t, int) Fieldslib.Field.t ->
                     Unix_syscalls.Stats.t -> int -> 'acc__) ->
                ino:('acc__ ->
                     (Unix_syscalls.Stats.t, int) Fieldslib.Field.t ->
                     Unix_syscalls.Stats.t -> int -> 'acc__) ->
                kind:('acc__ ->
                      (Unix_syscalls.Stats.t, Unix_syscalls.File_kind.t)
                      Fieldslib.Field.t ->
                      Unix_syscalls.Stats.t ->
                      Unix_syscalls.File_kind.t -> 'acc__) ->
                perm:('acc__ ->
                      (Unix_syscalls.Stats.t, Unix_syscalls.file_perm)
                      Fieldslib.Field.t ->
                      Unix_syscalls.Stats.t ->
                      Unix_syscalls.file_perm -> 'acc__) ->
                nlink:('acc__ ->
                       (Unix_syscalls.Stats.t, int) Fieldslib.Field.t ->
                       Unix_syscalls.Stats.t -> int -> 'acc__) ->
                uid:('acc__ ->
                     (Unix_syscalls.Stats.t, int) Fieldslib.Field.t ->
                     Unix_syscalls.Stats.t -> int -> 'acc__) ->
                gid:('acc__ ->
                     (Unix_syscalls.Stats.t, int) Fieldslib.Field.t ->
                     Unix_syscalls.Stats.t -> int -> 'acc__) ->
                rdev:('acc__ ->
                      (Unix_syscalls.Stats.t, int) Fieldslib.Field.t ->
                      Unix_syscalls.Stats.t -> int -> 'acc__) ->
                size:('acc__ ->
                      (Unix_syscalls.Stats.t, int64) Fieldslib.Field.t ->
                      Unix_syscalls.Stats.t -> int64 -> 'acc__) ->
                atime:('acc__ ->
                       (Unix_syscalls.Stats.t, Core.Std.Time.t)
                       Fieldslib.Field.t ->
                       Unix_syscalls.Stats.t -> Core.Std.Time.t -> 'acc__) ->
                mtime:('acc__ ->
                       (Unix_syscalls.Stats.t, Core.Std.Time.t)
                       Fieldslib.Field.t ->
                       Unix_syscalls.Stats.t -> Core.Std.Time.t -> 'acc__) ->
                ctime:('acc__ ->
                       (Unix_syscalls.Stats.t, Core.Std.Time.t)
                       Fieldslib.Field.t ->
                       Unix_syscalls.Stats.t -> Core.Std.Time.t -> 'acc__) ->
                'acc__
            end
        end
      val to_string : Unix_syscalls.Stats.t -> string
    end
  val fstat : Fd.t -> Unix_syscalls.Stats.t Import.Deferred.t
  val stat : string -> Unix_syscalls.Stats.t Import.Deferred.t
  val lstat : string -> Unix_syscalls.Stats.t Import.Deferred.t
  val unlink : string -> unit Import.Deferred.t
  val rename : src:string -> dst:string -> unit Import.Deferred.t
  val link :
    ?force:bool ->
    target:string -> link_name:string -> unit -> unit Import.Deferred.t
  val chmod :
    string -> perm:Unix_syscalls.file_perm -> unit Import.Deferred.t
  val fchmod : Fd.t -> perm:Unix_syscalls.file_perm -> unit Import.Deferred.t
  val chown : string -> uid:int -> gid:int -> unit Import.Deferred.t
  val fchown : Fd.t -> uid:int -> gid:int -> unit Import.Deferred.t
  val access :
    string ->
    [ `Exec | `Exists | `Read | `Write ] list ->
    (unit, exn) Core.Std.Result.t Import.Deferred.t
  val access_exn :
    string ->
    [ `Exec | `Exists | `Read | `Write ] list -> unit Import.Deferred.t
  val set_close_on_exec : Fd.t -> unit
  val clear_close_on_exec : Fd.t -> unit
  val mkdir :
    ?p:unit ->
    ?perm:Unix_syscalls.file_perm -> string -> unit Import.Deferred.t
  val rmdir : string -> unit Import.Deferred.t
  val chdir : string -> unit Import.Deferred.t
  val getcwd : unit -> string Import.Deferred.t
  val chroot : string -> unit Import.Deferred.t
  type dir_handle = Core.Std.Unix.dir_handle
  val opendir : string -> Unix_syscalls.dir_handle Import.Deferred.t
  val readdir : Unix_syscalls.dir_handle -> string Import.Deferred.t
  val rewinddir : Unix_syscalls.dir_handle -> unit Import.Deferred.t
  val closedir : Unix_syscalls.dir_handle -> unit Import.Deferred.t
  val pipe :
    unit -> ([ `Reader of Fd.t ] * [ `Writer of Fd.t ]) Import.Deferred.t
  val symlink : src:string -> dst:string -> unit Import.Deferred.t
  val readlink : string -> string Import.Deferred.t
  val mkstemp : string -> (string * Fd.t) Import.Deferred.t
  val mkdtemp : string -> string Import.Deferred.t
  type process_times =
    Core.Std.Unix.process_times = {
    tms_utime : float;
    tms_stime : float;
    tms_cutime : float;
    tms_cstime : float;
  }
  val times : unit -> Unix_syscalls.process_times
  type tm =
    Core.Std.Unix.tm = {
    tm_sec : int;
    tm_min : int;
    tm_hour : int;
    tm_mday : int;
    tm_mon : int;
    tm_year : int;
    tm_wday : int;
    tm_yday : int;
    tm_isdst : bool;
  }
  val time : unit -> float
  val gettimeofday : unit -> float
  val gmtime : float -> Unix_syscalls.tm
  val localtime : float -> Unix_syscalls.tm
  val mktime : Unix_syscalls.tm -> float * Unix_syscalls.tm
  val utimes :
    string -> access:float -> modif:float -> unit Import.Deferred.t
  val environment : unit -> string array
  val getenv : string -> string option
  val getenv_exn : string -> string
  val putenv : key:string -> data:string -> unit
  val fork_exec :
    prog:string ->
    args:string list ->
    ?use_path:bool ->
    ?env:string list -> unit -> Core.Std.Pid.t Import.Deferred.t
  type wait_on =
      [ `Any | `Group of Core.Std.Pid.t | `My_group | `Pid of Core.Std.Pid.t ]
  val sexp_of_wait_on : Unix_syscalls.wait_on -> Sexplib.Sexp.t
  val wait_on_of_sexp : Sexplib.Sexp.t -> Unix_syscalls.wait_on
  val wait_on_of_sexp__ : Sexplib.Sexp.t -> Unix_syscalls.wait_on
  val wait :
    Unix_syscalls.wait_on ->
    (Core.Std.Pid.t * Exit_or_signal.t) Import.Deferred.t
  val wait_nohang :
    Unix_syscalls.wait_on -> (Core.Std.Pid.t * Exit_or_signal.t) option
  val wait_untraced :
    Unix_syscalls.wait_on ->
    (Core.Std.Pid.t * Exit_or_signal_or_stop.t) Import.Deferred.t
  val wait_nohang_untraced :
    Unix_syscalls.wait_on ->
    (Core.Std.Pid.t * Exit_or_signal_or_stop.t) option
  module Inet_addr :
    sig
      type t = Core.Std.Unix.Inet_addr.t
      val sexp_of_t : Unix_syscalls.Inet_addr.t -> Sexplib.Sexp.t
      val t_of_sexp : Sexplib.Sexp.t -> Unix_syscalls.Inet_addr.t
      val bin_size_t : Unix_syscalls.Inet_addr.t Core.Std.Bin_prot.Size.sizer
      val bin_write_t :
        Unix_syscalls.Inet_addr.t Core.Std.Bin_prot.Write_ml.writer
      val bin_write_t_ :
        Unix_syscalls.Inet_addr.t Core.Std.Bin_prot.Unsafe_write_c.writer
      val bin_writer_t :
        Unix_syscalls.Inet_addr.t Core.Std.Bin_prot.Type_class.writer
      val bin_read_t :
        Unix_syscalls.Inet_addr.t Core.Std.Bin_prot.Read_ml.reader
      val bin_read_t_ :
        Unix_syscalls.Inet_addr.t Core.Std.Bin_prot.Unsafe_read_c.reader
      val bin_read_t__ :
        (int -> Unix_syscalls.Inet_addr.t)
        Core.Std.Bin_prot.Unsafe_read_c.reader
      val bin_reader_t :
        Unix_syscalls.Inet_addr.t Core.Std.Bin_prot.Type_class.reader
      val bin_t : Unix_syscalls.Inet_addr.t Core.Std.Bin_prot.Type_class.t
      val of_string : string -> Unix_syscalls.Inet_addr.t
      val to_string : Unix_syscalls.Inet_addr.t -> string
      val bind_any : Unix_syscalls.Inet_addr.t
      val bind_any_inet6 : Unix_syscalls.Inet_addr.t
      val localhost : Unix_syscalls.Inet_addr.t
      val localhost_inet6 : Unix_syscalls.Inet_addr.t
      val of_string_or_getbyname :
        string -> Unix_syscalls.Inet_addr.t Import.Deferred.t
    end
  module Protocol_family : sig type t = Core.Std.Unix.Protocol_family.t end
  val socketpair : unit -> Fd.t * Fd.t
  module Socket :
    sig
      type unix = [ `Unix of string ]
      val bin_size_unix :
        Unix_syscalls.Socket.unix Core.Std.Bin_prot.Size.sizer
      val bin_write_unix :
        Unix_syscalls.Socket.unix Core.Std.Bin_prot.Write_ml.writer
      val bin_write_unix_ :
        Unix_syscalls.Socket.unix Core.Std.Bin_prot.Unsafe_write_c.writer
      val bin_writer_unix :
        Unix_syscalls.Socket.unix Core.Std.Bin_prot.Type_class.writer
      val bin_read_unix :
        Unix_syscalls.Socket.unix Core.Std.Bin_prot.Read_ml.reader
      val bin_read_unix_ :
        Unix_syscalls.Socket.unix Core.Std.Bin_prot.Unsafe_read_c.reader
      val bin_read_unix__ :
        (int -> Unix_syscalls.Socket.unix)
        Core.Std.Bin_prot.Unsafe_read_c.reader
      val bin_reader_unix :
        Unix_syscalls.Socket.unix Core.Std.Bin_prot.Type_class.reader
      val bin_unix : Unix_syscalls.Socket.unix Core.Std.Bin_prot.Type_class.t
      val sexp_of_unix : Unix_syscalls.Socket.unix -> Sexplib.Sexp.t
      val unix_of_sexp : Sexplib.Sexp.t -> Unix_syscalls.Socket.unix
      val unix_of_sexp__ : Sexplib.Sexp.t -> Unix_syscalls.Socket.unix
      type inet = [ `Inet of Unix_syscalls.Inet_addr.t * int ]
      val bin_size_inet :
        Unix_syscalls.Socket.inet Core.Std.Bin_prot.Size.sizer
      val bin_write_inet :
        Unix_syscalls.Socket.inet Core.Std.Bin_prot.Write_ml.writer
      val bin_write_inet_ :
        Unix_syscalls.Socket.inet Core.Std.Bin_prot.Unsafe_write_c.writer
      val bin_writer_inet :
        Unix_syscalls.Socket.inet Core.Std.Bin_prot.Type_class.writer
      val bin_read_inet :
        Unix_syscalls.Socket.inet Core.Std.Bin_prot.Read_ml.reader
      val bin_read_inet_ :
        Unix_syscalls.Socket.inet Core.Std.Bin_prot.Unsafe_read_c.reader
      val bin_read_inet__ :
        (int -> Unix_syscalls.Socket.inet)
        Core.Std.Bin_prot.Unsafe_read_c.reader
      val bin_reader_inet :
        Unix_syscalls.Socket.inet Core.Std.Bin_prot.Type_class.reader
      val bin_inet : Unix_syscalls.Socket.inet Core.Std.Bin_prot.Type_class.t
      val sexp_of_inet : Unix_syscalls.Socket.inet -> Sexplib.Sexp.t
      val inet_of_sexp : Sexplib.Sexp.t -> Unix_syscalls.Socket.inet
      val inet_of_sexp__ : Sexplib.Sexp.t -> Unix_syscalls.Socket.inet
      type 'a addr = 'a
        constraint 'a =
          [< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ]
      val bin_size_addr :
        ([< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ]
         as 'a)
        Core.Std.Bin_prot.Size.sizer ->
        'Unix_syscalls.Socket.addr Core.Std.Bin_prot.Size.sizer
      val bin_write_addr :
        ([< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ]
         as 'a)
        Core.Std.Bin_prot.Unsafe_write_c.writer ->
        'Unix_syscalls.Socket.addr Core.Std.Bin_prot.Write_ml.writer
      val bin_write_addr_ :
        ([< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ]
         as 'a)
        Core.Std.Bin_prot.Unsafe_write_c.writer ->
        'Unix_syscalls.Socket.addr Core.Std.Bin_prot.Unsafe_write_c.writer
      val bin_writer_addr :
        ([< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ]
         as 'a)
        Core.Std.Bin_prot.Type_class.writer ->
        'Unix_syscalls.Socket.addr Core.Std.Bin_prot.Type_class.writer
      val bin_read_addr :
        ([< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ]
         as 'a)
        Core.Std.Bin_prot.Unsafe_read_c.reader ->
        'Unix_syscalls.Socket.addr Core.Std.Bin_prot.Read_ml.reader
      val bin_read_addr_ :
        ([< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ]
         as 'a)
        Core.Std.Bin_prot.Unsafe_read_c.reader ->
        'Unix_syscalls.Socket.addr Core.Std.Bin_prot.Unsafe_read_c.reader
      val bin_read_addr__ :
        ([< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ]
         as 'a)
        Core.Std.Bin_prot.Unsafe_read_c.reader ->
        (int -> 'Unix_syscalls.Socket.addr)
        Core.Std.Bin_prot.Unsafe_read_c.reader
      val bin_reader_addr :
        ([< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ]
         as 'a)
        Core.Std.Bin_prot.Type_class.reader ->
        'Unix_syscalls.Socket.addr Core.Std.Bin_prot.Type_class.reader
      val bin_addr :
        ([< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ]
         as 'a)
        Core.Std.Bin_prot.Type_class.t ->
        'Unix_syscalls.Socket.addr Core.Std.Bin_prot.Type_class.t
      val sexp_of_addr :
        (([< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ]
          as 'a) ->
         Sexplib.Sexp.t) ->
        'Unix_syscalls.Socket.addr -> Sexplib.Sexp.t
      val addr_of_sexp :
        (Sexplib.Sexp.t ->
         ([< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ]
          as 'a)) ->
        Sexplib.Sexp.t -> 'Unix_syscalls.Socket.addr
      val address_string_of_inet : Unix_syscalls.Socket.inet -> string
      val string_of_inet : Unix_syscalls.Socket.inet -> string
      val string_of_unix : Unix_syscalls.Socket.unix -> string
      module Address :
        sig
          type t =
              [ `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ]
          val bin_size_t :
            Unix_syscalls.Socket.Address.t Core.Std.Bin_prot.Size.sizer
          val bin_write_t :
            Unix_syscalls.Socket.Address.t Core.Std.Bin_prot.Write_ml.writer
          val bin_write_t_ :
            Unix_syscalls.Socket.Address.t
            Core.Std.Bin_prot.Unsafe_write_c.writer
          val bin_writer_t :
            Unix_syscalls.Socket.Address.t
            Core.Std.Bin_prot.Type_class.writer
          val bin_read_t :
            Unix_syscalls.Socket.Address.t Core.Std.Bin_prot.Read_ml.reader
          val bin_read_t_ :
            Unix_syscalls.Socket.Address.t
            Core.Std.Bin_prot.Unsafe_read_c.reader
          val bin_read_t__ :
            (int -> Unix_syscalls.Socket.Address.t)
            Core.Std.Bin_prot.Unsafe_read_c.reader
          val bin_reader_t :
            Unix_syscalls.Socket.Address.t
            Core.Std.Bin_prot.Type_class.reader
          val bin_t :
            Unix_syscalls.Socket.Address.t Core.Std.Bin_prot.Type_class.t
          val sexp_of_t : Unix_syscalls.Socket.Address.t -> Sexplib.Sexp.t
          val t_of_sexp : Sexplib.Sexp.t -> Unix_syscalls.Socket.Address.t
          val t_of_sexp__ : Sexplib.Sexp.t -> Unix_syscalls.Socket.Address.t
          val unix : string -> Unix_syscalls.Socket.unix
          val inet :
            Unix_syscalls.Inet_addr.t ->
            port:int -> Unix_syscalls.Socket.inet
          val inet_addr_any : port:int -> Unix_syscalls.Socket.inet
          val to_string :
            [< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ]
            Unix_syscalls.Socket.addr -> string
          val to_unix :
            [< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ]
            Unix_syscalls.Socket.addr -> Core.Std.Unix.sockaddr
        end
      module Family :
        sig
          type 'a t
            constraint 'a =
              [< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ]
          val unix : Unix_syscalls.Socket.unix Unix_syscalls.Socket.Family.t
          val inet : Unix_syscalls.Socket.inet Unix_syscalls.Socket.Family.t
        end
      type ('a, 'b) t
        constraint 'a = [< `Active | `Bound | `Passive | `Unconnected ]
        constraint 'b =
          [< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ]
      module Type :
        sig
          type 'a t
            constraint 'a =
              [< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ]
          val tcp : Unix_syscalls.Socket.inet Unix_syscalls.Socket.Type.t
          val udp : Unix_syscalls.Socket.inet Unix_syscalls.Socket.Type.t
          val unix : Unix_syscalls.Socket.unix Unix_syscalls.Socket.Type.t
        end
      val create :
        ([< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ]
         as 'a)
        Unix_syscalls.Socket.Type.t ->
        ([ `Unconnected ], 'a) Unix_syscalls.Socket.t
      val connect :
        ([ `Unconnected ],
         [< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ]
         as 'a)
        Unix_syscalls.Socket.t ->
        '-> ([ `Active ], 'a) Unix_syscalls.Socket.t Import.Deferred.t
      val connect_interruptible :
        ([ `Unconnected ],
         [< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ]
         as 'a)
        Unix_syscalls.Socket.t ->
        '->
        interrupt:unit Import.Deferred.t ->
        [ `Interrupted | `Ok of ([ `Active ], 'a) Unix_syscalls.Socket.t ]
        Import.Deferred.t
      val bind :
        ([ `Unconnected ],
         [< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ]
         as 'a)
        Unix_syscalls.Socket.t ->
        '-> ([ `Bound ], 'a) Unix_syscalls.Socket.t Import.Deferred.t
      val listen :
        ?max_pending_connections:int ->
        ([ `Bound ],
         [< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ]
         as 'a)
        Unix_syscalls.Socket.t -> ([ `Passive ], 'a) Unix_syscalls.Socket.t
      val accept :
        ([ `Passive ],
         [< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ]
         as 'a)
        Unix_syscalls.Socket.t ->
        (([ `Active ], 'a) Unix_syscalls.Socket.t * 'a) Import.Deferred.t
      val accept_interruptible :
        ([ `Passive ],
         [< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ]
         as 'a)
        Unix_syscalls.Socket.t ->
        interrupt:unit Import.Deferred.t ->
        [ `Interrupted | `Ok of ([ `Active ], 'a) Unix_syscalls.Socket.t * 'a ]
        Import.Deferred.t
      val shutdown :
        ([< `Active | `Bound | `Passive | `Unconnected ],
         [< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ])
        Unix_syscalls.Socket.t -> [ `Both | `Receive | `Send ] -> unit
      val fd :
        ([< `Active | `Bound | `Passive | `Unconnected ],
         [< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ])
        Unix_syscalls.Socket.t -> Fd.t
      val of_fd :
        Fd.t ->
        ([< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ]
         as 'a)
        Unix_syscalls.Socket.Type.t ->
        ([< `Active | `Bound | `Passive | `Unconnected ], 'a)
        Unix_syscalls.Socket.t
      val getsockname :
        ([< `Active | `Bound | `Passive | `Unconnected ],
         [< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ]
         as 'a)
        Unix_syscalls.Socket.t -> 'a
      val getpeername :
        ([< `Active | `Bound | `Passive | `Unconnected ],
         [< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ]
         as 'a)
        Unix_syscalls.Socket.t -> 'a
      module Opt :
        sig
          type 'a t
          val debug : bool Unix_syscalls.Socket.Opt.t
          val broadcast : bool Unix_syscalls.Socket.Opt.t
          val reuseaddr : bool Unix_syscalls.Socket.Opt.t
          val keepalive : bool Unix_syscalls.Socket.Opt.t
          val dontroute : bool Unix_syscalls.Socket.Opt.t
          val oobinline : bool Unix_syscalls.Socket.Opt.t
          val acceptconn : bool Unix_syscalls.Socket.Opt.t
          val nodelay : bool Unix_syscalls.Socket.Opt.t
          val sndbuf : int Unix_syscalls.Socket.Opt.t
          val rcvbuf : int Unix_syscalls.Socket.Opt.t
          val error : int Unix_syscalls.Socket.Opt.t
          val typ : int Unix_syscalls.Socket.Opt.t
          val rcvlowat : int Unix_syscalls.Socket.Opt.t
          val sndlowat : int Unix_syscalls.Socket.Opt.t
          val linger : int option Unix_syscalls.Socket.Opt.t
          val rcvtimeo : float Unix_syscalls.Socket.Opt.t
          val sndtimeo : float Unix_syscalls.Socket.Opt.t
        end
      val getopt :
        ([< `Active | `Bound | `Passive | `Unconnected ],
         [< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ])
        Unix_syscalls.Socket.t -> 'Unix_syscalls.Socket.Opt.t -> 'c
      val setopt :
        ([< `Active | `Bound | `Passive | `Unconnected ],
         [< `Inet of Unix_syscalls.Inet_addr.t * int | `Unix of string ])
        Unix_syscalls.Socket.t -> 'Unix_syscalls.Socket.Opt.t -> '-> unit
    end
  module Host :
    sig
      type t =
        Core.Std.Unix.Host.t = {
        name : string;
        aliases : string array;
        family : Unix_syscalls.Protocol_family.t;
        addresses : Unix_syscalls.Inet_addr.t array;
      }
      val getbyname : string -> Unix_syscalls.Host.t option Import.Deferred.t
      val getbyname_exn : string -> Unix_syscalls.Host.t Import.Deferred.t
      val getbyaddr :
        Unix_syscalls.Inet_addr.t ->
        Unix_syscalls.Host.t option Import.Deferred.t
      val getbyaddr_exn :
        Unix_syscalls.Inet_addr.t -> Unix_syscalls.Host.t Import.Deferred.t
    end
  val gethostname : unit -> string
  val getuid : unit -> int
  val geteuid : unit -> int
  val getgid : unit -> int
  val getegid : unit -> int
  val setuid : int -> unit
  type error =
    Core.Std.Unix.error =
      E2BIG
    | EACCES
    | EAGAIN
    | EBADF
    | EBUSY
    | ECHILD
    | EDEADLK
    | EDOM
    | EEXIST
    | EFAULT
    | EFBIG
    | EINTR
    | EINVAL
    | EIO
    | EISDIR
    | EMFILE
    | EMLINK
    | ENAMETOOLONG
    | ENFILE
    | ENODEV
    | ENOENT
    | ENOEXEC
    | ENOLCK
    | ENOMEM
    | ENOSPC
    | ENOSYS
    | ENOTDIR
    | ENOTEMPTY
    | ENOTTY
    | ENXIO
    | EPERM
    | EPIPE
    | ERANGE
    | EROFS
    | ESPIPE
    | ESRCH
    | EXDEV
    | EWOULDBLOCK
    | EINPROGRESS
    | EALREADY
    | ENOTSOCK
    | EDESTADDRREQ
    | EMSGSIZE
    | EPROTOTYPE
    | ENOPROTOOPT
    | EPROTONOSUPPORT
    | ESOCKTNOSUPPORT
    | EOPNOTSUPP
    | EPFNOSUPPORT
    | EAFNOSUPPORT
    | EADDRINUSE
    | EADDRNOTAVAIL
    | ENETDOWN
    | ENETUNREACH
    | ENETRESET
    | ECONNABORTED
    | ECONNRESET
    | ENOBUFS
    | EISCONN
    | ENOTCONN
    | ESHUTDOWN
    | ETOOMANYREFS
    | ETIMEDOUT
    | ECONNREFUSED
    | EHOSTDOWN
    | EHOSTUNREACH
    | ELOOP
    | EOVERFLOW
    | EUNKNOWNERR of int
  val sexp_of_error : Unix_syscalls.error -> Sexplib.Sexp.t
  val error_of_sexp : Sexplib.Sexp.t -> Unix_syscalls.error
  exception Unix_error of Unix_syscalls.error * string * string
  module Terminal_io :
    sig
      type t =
        Core.Std.Caml.Unix.terminal_io = {
        mutable c_ignbrk : bool;
        mutable c_brkint : bool;
        mutable c_ignpar : bool;
        mutable c_parmrk : bool;
        mutable c_inpck : bool;
        mutable c_istrip : bool;
        mutable c_inlcr : bool;
        mutable c_igncr : bool;
        mutable c_icrnl : bool;
        mutable c_ixon : bool;
        mutable c_ixoff : bool;
        mutable c_opost : bool;
        mutable c_obaud : int;
        mutable c_ibaud : int;
        mutable c_csize : int;
        mutable c_cstopb : int;
        mutable c_cread : bool;
        mutable c_parenb : bool;
        mutable c_parodd : bool;
        mutable c_hupcl : bool;
        mutable c_clocal : bool;
        mutable c_isig : bool;
        mutable c_icanon : bool;
        mutable c_noflsh : bool;
        mutable c_echo : bool;
        mutable c_echoe : bool;
        mutable c_echok : bool;
        mutable c_echonl : bool;
        mutable c_vintr : char;
        mutable c_vquit : char;
        mutable c_verase : char;
        mutable c_vkill : char;
        mutable c_veof : char;
        mutable c_veol : char;
        mutable c_vmin : int;
        mutable c_vtime : int;
        mutable c_vstart : char;
        mutable c_vstop : char;
      }
      type setattr_when =
        Core.Std.Caml.Unix.setattr_when =
          TCSANOW
        | TCSADRAIN
        | TCSAFLUSH
      val tcgetattr : Fd.t -> Unix_syscalls.Terminal_io.t Import.Deferred.t
      val tcsetattr :
        Unix_syscalls.Terminal_io.t ->
        Fd.t ->
        mode:Unix_syscalls.Terminal_io.setattr_when -> unit Import.Deferred.t
    end
  module Passwd :
    sig
      type t = {
        name : string;
        passwd : string;
        uid : int;
        gid : int;
        gecos : string;
        dir : string;
        shell : string;
      }
      val sexp_of_t : Unix_syscalls.Passwd.t -> Sexplib.Sexp.t
      val t_of_sexp : Sexplib.Sexp.t -> Unix_syscalls.Passwd.t
      val shell : Unix_syscalls.Passwd.t -> string
      val dir : Unix_syscalls.Passwd.t -> string
      val gecos : Unix_syscalls.Passwd.t -> string
      val gid : Unix_syscalls.Passwd.t -> int
      val uid : Unix_syscalls.Passwd.t -> int
      val passwd : Unix_syscalls.Passwd.t -> string
      val name : Unix_syscalls.Passwd.t -> string
      module Fields :
        sig
          val names : string list
          val shell : (Unix_syscalls.Passwd.t, string) Fieldslib.Field.t
          val dir : (Unix_syscalls.Passwd.t, string) Fieldslib.Field.t
          val gecos : (Unix_syscalls.Passwd.t, string) Fieldslib.Field.t
          val gid : (Unix_syscalls.Passwd.t, int) Fieldslib.Field.t
          val uid : (Unix_syscalls.Passwd.t, int) Fieldslib.Field.t
          val passwd : (Unix_syscalls.Passwd.t, string) Fieldslib.Field.t
          val name : (Unix_syscalls.Passwd.t, string) Fieldslib.Field.t
          val fold :
            init:'acc__ ->
            name:('acc__ ->
                  (Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                  'acc__) ->
            passwd:('acc__ ->
                    (Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                    'acc__) ->
            uid:('acc__ ->
                 (Unix_syscalls.Passwd.t, int) Fieldslib.Field.t -> 'acc__) ->
            gid:('acc__ ->
                 (Unix_syscalls.Passwd.t, int) Fieldslib.Field.t -> 'acc__) ->
            gecos:('acc__ ->
                   (Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                   'acc__) ->
            dir:('acc__ ->
                 (Unix_syscalls.Passwd.t, string) Fieldslib.Field.t -> 'acc__) ->
            shell:('acc__ ->
                   (Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                   'acc__) ->
            'acc__
          val make_creator :
            name:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                  'compile_acc__ -> ('input__ -> string) * 'compile_acc__) ->
            passwd:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                    'compile_acc__ -> ('input__ -> string) * 'compile_acc__) ->
            uid:((Unix_syscalls.Passwd.t, int) Fieldslib.Field.t ->
                 'compile_acc__ -> ('input__ -> int) * 'compile_acc__) ->
            gid:((Unix_syscalls.Passwd.t, int) Fieldslib.Field.t ->
                 'compile_acc__ -> ('input__ -> int) * 'compile_acc__) ->
            gecos:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                   'compile_acc__ -> ('input__ -> string) * 'compile_acc__) ->
            dir:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                 'compile_acc__ -> ('input__ -> string) * 'compile_acc__) ->
            shell:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                   'compile_acc__ -> ('input__ -> string) * 'compile_acc__) ->
            'compile_acc__ ->
            ('input__ -> Unix_syscalls.Passwd.t) * 'compile_acc__
          val create :
            name:string ->
            passwd:string ->
            uid:int ->
            gid:int ->
            gecos:string ->
            dir:string -> shell:string -> Unix_syscalls.Passwd.t
          val iter :
            name:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t -> unit) ->
            passwd:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                    unit) ->
            uid:((Unix_syscalls.Passwd.t, int) Fieldslib.Field.t -> unit) ->
            gid:((Unix_syscalls.Passwd.t, int) Fieldslib.Field.t -> unit) ->
            gecos:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t -> unit) ->
            dir:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t -> unit) ->
            shell:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t -> unit) ->
            unit
          val map :
            name:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                  string) ->
            passwd:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                    string) ->
            uid:((Unix_syscalls.Passwd.t, int) Fieldslib.Field.t -> int) ->
            gid:((Unix_syscalls.Passwd.t, int) Fieldslib.Field.t -> int) ->
            gecos:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                   string) ->
            dir:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t -> string) ->
            shell:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                   string) ->
            Unix_syscalls.Passwd.t
          val map_poly :
            (Unix_syscalls.Passwd.t, 'x0) Fieldslib.Field.user -> 'x0 list
          val for_all :
            name:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t -> bool) ->
            passwd:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                    bool) ->
            uid:((Unix_syscalls.Passwd.t, int) Fieldslib.Field.t -> bool) ->
            gid:((Unix_syscalls.Passwd.t, int) Fieldslib.Field.t -> bool) ->
            gecos:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t -> bool) ->
            dir:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t -> bool) ->
            shell:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t -> bool) ->
            bool
          val exists :
            name:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t -> bool) ->
            passwd:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                    bool) ->
            uid:((Unix_syscalls.Passwd.t, int) Fieldslib.Field.t -> bool) ->
            gid:((Unix_syscalls.Passwd.t, int) Fieldslib.Field.t -> bool) ->
            gecos:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t -> bool) ->
            dir:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t -> bool) ->
            shell:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t -> bool) ->
            bool
          val to_list :
            name:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                  'elem__) ->
            passwd:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                    'elem__) ->
            uid:((Unix_syscalls.Passwd.t, int) Fieldslib.Field.t -> 'elem__) ->
            gid:((Unix_syscalls.Passwd.t, int) Fieldslib.Field.t -> 'elem__) ->
            gecos:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                   'elem__) ->
            dir:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                 'elem__) ->
            shell:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                   'elem__) ->
            'elem__ list
          module Direct :
            sig
              val iter :
                Unix_syscalls.Passwd.t ->
                name:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                      Unix_syscalls.Passwd.t -> string -> unit) ->
                passwd:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                        Unix_syscalls.Passwd.t -> string -> unit) ->
                uid:((Unix_syscalls.Passwd.t, int) Fieldslib.Field.t ->
                     Unix_syscalls.Passwd.t -> int -> unit) ->
                gid:((Unix_syscalls.Passwd.t, int) Fieldslib.Field.t ->
                     Unix_syscalls.Passwd.t -> int -> unit) ->
                gecos:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                       Unix_syscalls.Passwd.t -> string -> unit) ->
                dir:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                     Unix_syscalls.Passwd.t -> string -> unit) ->
                shell:((Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                       Unix_syscalls.Passwd.t -> string -> unit) ->
                unit
              val fold :
                Unix_syscalls.Passwd.t ->
                init:'acc__ ->
                name:('acc__ ->
                      (Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                      Unix_syscalls.Passwd.t -> string -> 'acc__) ->
                passwd:('acc__ ->
                        (Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                        Unix_syscalls.Passwd.t -> string -> 'acc__) ->
                uid:('acc__ ->
                     (Unix_syscalls.Passwd.t, int) Fieldslib.Field.t ->
                     Unix_syscalls.Passwd.t -> int -> 'acc__) ->
                gid:('acc__ ->
                     (Unix_syscalls.Passwd.t, int) Fieldslib.Field.t ->
                     Unix_syscalls.Passwd.t -> int -> 'acc__) ->
                gecos:('acc__ ->
                       (Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                       Unix_syscalls.Passwd.t -> string -> 'acc__) ->
                dir:('acc__ ->
                     (Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                     Unix_syscalls.Passwd.t -> string -> 'acc__) ->
                shell:('acc__ ->
                       (Unix_syscalls.Passwd.t, string) Fieldslib.Field.t ->
                       Unix_syscalls.Passwd.t -> string -> 'acc__) ->
                'acc__
            end
        end
      val getbyname :
        string -> Unix_syscalls.Passwd.t option Import.Deferred.t
      val getbyname_exn : string -> Unix_syscalls.Passwd.t Import.Deferred.t
      val getbyuid : int -> Unix_syscalls.Passwd.t option Import.Deferred.t
      val getbyuid_exn : int -> Unix_syscalls.Passwd.t Import.Deferred.t
    end
  module Group :
    sig
      type t = {
        name : string;
        passwd : string;
        gid : int;
        mem : string array;
      }
      val sexp_of_t : Unix_syscalls.Group.t -> Sexplib.Sexp.t
      val t_of_sexp : Sexplib.Sexp.t -> Unix_syscalls.Group.t
      val mem : Unix_syscalls.Group.t -> string array
      val gid : Unix_syscalls.Group.t -> int
      val passwd : Unix_syscalls.Group.t -> string
      val name : Unix_syscalls.Group.t -> string
      module Fields :
        sig
          val names : string list
          val mem : (Unix_syscalls.Group.t, string array) Fieldslib.Field.t
          val gid : (Unix_syscalls.Group.t, int) Fieldslib.Field.t
          val passwd : (Unix_syscalls.Group.t, string) Fieldslib.Field.t
          val name : (Unix_syscalls.Group.t, string) Fieldslib.Field.t
          val fold :
            init:'acc__ ->
            name:('acc__ ->
                  (Unix_syscalls.Group.t, string) Fieldslib.Field.t -> 'acc__) ->
            passwd:('acc__ ->
                    (Unix_syscalls.Group.t, string) Fieldslib.Field.t ->
                    'acc__) ->
            gid:('acc__ ->
                 (Unix_syscalls.Group.t, int) Fieldslib.Field.t -> 'acc__) ->
            mem:('acc__ ->
                 (Unix_syscalls.Group.t, string array) Fieldslib.Field.t ->
                 'acc__) ->
            'acc__
          val make_creator :
            name:((Unix_syscalls.Group.t, string) Fieldslib.Field.t ->
                  'compile_acc__ -> ('input__ -> string) * 'compile_acc__) ->
            passwd:((Unix_syscalls.Group.t, string) Fieldslib.Field.t ->
                    'compile_acc__ -> ('input__ -> string) * 'compile_acc__) ->
            gid:((Unix_syscalls.Group.t, int) Fieldslib.Field.t ->
                 'compile_acc__ -> ('input__ -> int) * 'compile_acc__) ->
            mem:((Unix_syscalls.Group.t, string array) Fieldslib.Field.t ->
                 'compile_acc__ ->
                 ('input__ -> string array) * 'compile_acc__) ->
            'compile_acc__ ->
            ('input__ -> Unix_syscalls.Group.t) * 'compile_acc__
          val create :
            name:string ->
            passwd:string ->
            gid:int -> mem:string array -> Unix_syscalls.Group.t
          val iter :
            name:((Unix_syscalls.Group.t, string) Fieldslib.Field.t -> unit) ->
            passwd:((Unix_syscalls.Group.t, string) Fieldslib.Field.t -> unit) ->
            gid:((Unix_syscalls.Group.t, int) Fieldslib.Field.t -> unit) ->
            mem:((Unix_syscalls.Group.t, string array) Fieldslib.Field.t ->
                 unit) ->
            unit
          val map :
            name:((Unix_syscalls.Group.t, string) Fieldslib.Field.t -> string) ->
            passwd:((Unix_syscalls.Group.t, string) Fieldslib.Field.t ->
                    string) ->
            gid:((Unix_syscalls.Group.t, int) Fieldslib.Field.t -> int) ->
            mem:((Unix_syscalls.Group.t, string array) Fieldslib.Field.t ->
                 string array) ->
            Unix_syscalls.Group.t
          val map_poly :
            (Unix_syscalls.Group.t, 'x0) Fieldslib.Field.user -> 'x0 list
          val for_all :
            name:((Unix_syscalls.Group.t, string) Fieldslib.Field.t -> bool) ->
            passwd:((Unix_syscalls.Group.t, string) Fieldslib.Field.t -> bool) ->
            gid:((Unix_syscalls.Group.t, int) Fieldslib.Field.t -> bool) ->
            mem:((Unix_syscalls.Group.t, string array) Fieldslib.Field.t ->
                 bool) ->
            bool
          val exists :
            name:((Unix_syscalls.Group.t, string) Fieldslib.Field.t -> bool) ->
            passwd:((Unix_syscalls.Group.t, string) Fieldslib.Field.t -> bool) ->
            gid:((Unix_syscalls.Group.t, int) Fieldslib.Field.t -> bool) ->
            mem:((Unix_syscalls.Group.t, string array) Fieldslib.Field.t ->
                 bool) ->
            bool
          val to_list :
            name:((Unix_syscalls.Group.t, string) Fieldslib.Field.t ->
                  'elem__) ->
            passwd:((Unix_syscalls.Group.t, string) Fieldslib.Field.t ->
                    'elem__) ->
            gid:((Unix_syscalls.Group.t, int) Fieldslib.Field.t -> 'elem__) ->
            mem:((Unix_syscalls.Group.t, string array) Fieldslib.Field.t ->
                 'elem__) ->
            'elem__ list
          module Direct :
            sig
              val iter :
                Unix_syscalls.Group.t ->
                name:((Unix_syscalls.Group.t, string) Fieldslib.Field.t ->
                      Unix_syscalls.Group.t -> string -> unit) ->
                passwd:((Unix_syscalls.Group.t, string) Fieldslib.Field.t ->
                        Unix_syscalls.Group.t -> string -> unit) ->
                gid:((Unix_syscalls.Group.t, int) Fieldslib.Field.t ->
                     Unix_syscalls.Group.t -> int -> unit) ->
                mem:((Unix_syscalls.Group.t, string array) Fieldslib.Field.t ->
                     Unix_syscalls.Group.t -> string array -> unit) ->
                unit
              val fold :
                Unix_syscalls.Group.t ->
                init:'acc__ ->
                name:('acc__ ->
                      (Unix_syscalls.Group.t, string) Fieldslib.Field.t ->
                      Unix_syscalls.Group.t -> string -> 'acc__) ->
                passwd:('acc__ ->
                        (Unix_syscalls.Group.t, string) Fieldslib.Field.t ->
                        Unix_syscalls.Group.t -> string -> 'acc__) ->
                gid:('acc__ ->
                     (Unix_syscalls.Group.t, int) Fieldslib.Field.t ->
                     Unix_syscalls.Group.t -> int -> 'acc__) ->
                mem:('acc__ ->
                     (Unix_syscalls.Group.t, string array) Fieldslib.Field.t ->
                     Unix_syscalls.Group.t -> string array -> 'acc__) ->
                'acc__
            end
        end
      val getbyname :
        string -> Unix_syscalls.Group.t option Import.Deferred.t
      val getbyname_exn : string -> Unix_syscalls.Group.t Import.Deferred.t
      val getbygid : int -> Unix_syscalls.Group.t option Import.Deferred.t
      val getbygid_exn : int -> Unix_syscalls.Group.t Import.Deferred.t
    end
  val getlogin : unit -> string Import.Deferred.t
  val wordexp :
    ?flags:[ `No_cmd | `Show_err | `Undef ] list ->
    string -> string array Import.Deferred.t
  val ounit_tests : unit -> OUnit.test
end