public static ITry <Archive, IEnumerable <string> > Parse(Dto.Archive archive) { return(ArchiveMetadata.Create(archive).FlatMap(metadata => { return Try.Aggregate( TaxSummary.Create(archive, metadata.Version), ReportedValue.Create(archive, metadata.Version), Signature.Create(archive.Signature.Content), (taxSummary, reportedValue, signature) => new Archive(metadata, signature, taxSummary, reportedValue) ); })); }