 	case Unit
 	case Function(Box<T>, Box<T>)
 	case Sum(Box<T>, Box<T>)
+	case Product(Box<T>, Box<T>)
 	case Constructed(Box<Constructor<T>>)
 	case Universal(Set<Manifold.Variable>, Box<T>)
 

	}

	public static func product(x: T, _ y: T) -> Type {
		return constructed(.Product(Box(x), Box(y)))
	}

	public static func universal(variables: Set<Manifold.Variable>, _ quantified: T) -> Type {

		case let .Sum(t1, t2):
			return ifSum(t1.value, t2.value)

		case let .Product(t1, t2):
			return ifProduct(t1.value, t2.value)

		case let .Constructed(c):
			return ifConstructed(c.value)
