sig
  module SystemOperation :
    sig
      type t =
          StdinStdoutStderrAndBasicFunctionality
        | ReadFromFilesystem
        | WriteToFilesystem
        | CreateAndRemoveOnFilesystem
        | SpecialCreateAndRemoveOnFilesystem
        | TmpPath
        | Networking
        | NetworkingMulticast
        | FileAttributeModifiaction
        | ChangeFileOwnership
        | FileLocking
        | Unix
        | DNS
        | GetPassword
        | SendFileDescriptors
        | ReceivingFileDescriptors
        | TapeDrives
        | TTY
        | ProcessRelation
        | Execute
        | ProtectionExecute
        | SetTime
        | Processes
        | VirtualMemoryInfo
        | ChangeRightsOfAProcess
        | PacketFiltering
        | InspectionRoutingTable
        | ChangeRoutingTable
        | Audio
        | Video
        | BerkeleyPacketFiltering
        | Error
    end
  module PathAccess :
    sig
      type t = { permissions : Types.PathPermission.t list; path : string; }
    end
  module PathPermission :
    sig type t = Read | Write | Execute | CreateAndRemove end
  val run :
    system_operations:Types.SystemOperation.t list ->
    accesses:Types.PathAccess.t list -> (unit -> unit) -> unit
end