 
 	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) }"
 	}
 
 

//  Copyright (c) 2015 Rob Rix. All rights reserved.

public struct AssumptionSet: DictionaryLiteralConvertible, Equatable, SequenceType {
	public subscript(variable: Int) -> [Type] {
		get { return assumptions[variable] ?? [] }
		set { assumptions[variable] = self[variable] + newValue }

	left.assumptions.removeValueForKey(right)
	return left
}


// MARK: - Imports

import Prelude
