 //  Copyright (c) 2015 Rob Rix. All rights reserved.
 
-public struct AssumptionSet: DictionaryLiteralConvertible, Equatable, SequenceType {
+public struct AssumptionSet: DictionaryLiteralConvertible, Equatable, Printable, SequenceType {
 	public subscript(variable: Int) -> [Type] {
 		get { return assumptions[variable] ?? [] }
 		set { assumptions[variable] = self[variable] + newValue }

	left.assumptions.removeValueForKey(right)
	return left
}


	public init(dictionaryLiteral elements: (Int, [Type])...) {
		assumptions = [:] + elements
	}


	// MARK: Printable

	public var description: String {
		let s = lazy(assumptions)
			.map {
				let types = ", ".join(lazy($1).map(toString) |> sorted)
				return "\($0) ~ [ \(types) ]"
			}
			|> sorted
			|> (join <| "")
		return "{ \(s) }"
	}


