 		}
 }
 
-private class DependencyNode: Equatable {
+private class DependencyNode: Comparable {
 	let identifier: DependencyIdentifier
 	let proposedVersion: SemanticVersion
 	var versionSpecifier: VersionSpecifier

		self.proposedVersion = proposedVersion
		self.versionSpecifier = versionSpecifier
	}
}

private func ==(lhs: DependencyNode, rhs: DependencyNode) -> Bool {

		return versionsForDependency(dependency.identifier)
			.filter { dependency.version.satisfiedBy($0) }
			.map { DependencyNode(identifier: dependency.identifier, proposedVersion: $0, versionSpecifier: dependency.version) }
			.reduce(initial: []) { $0 + [ $1 ] }
			.map(sorted)
			.map(ColdSignal.fromValues)
			.concat(identity)
	}

	return permutations(nodeSignals)
