 		case let .Sum(t1, t2):
 			return ifSum(t1.value, t2.value)
 
-		case let .Constructed(c) where c.value.product != nil:
-			return c.value.product! |> ifProduct
+		case let .Product(t1, t2):
+			return ifProduct(t1.value, t2.value)
 
 		case let .Constructed(c):
 			return ifConstructed(c.value)

	}

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

