public void packageToFile(File packageFile) throws Exception { F2< RelativePath, PackageFileSystemObject<F2<UnixFsObject, ZipArchiveOutputStream, IoEffect>>, Boolean> pathFilter = pathFilter(); fileSystem = fileSystem.prettify(); Stream<PackageFileSystemObject<F2<UnixFsObject, ZipArchiveOutputStream, IoEffect>>> items = fileSystem.toList().filter(compose(BooleanF.invert, curry(pathFilter, BASE))); ZipArchiveOutputStream zos = null; try { zos = new ZipArchiveOutputStream(packageFile); zos.setLevel(Deflater.BEST_COMPRESSION); for (PackageFileSystemObject<F2<UnixFsObject, ZipArchiveOutputStream, IoEffect>> fileSystemObject : items) { fileSystemObject.getExtension().f(fileSystemObject.getUnixFsObject(), zos).run(); } } finally { IOUtil.close(zos); } }