 			return try ifBoth(a, b)
 		}
 	}
-}+}
+
+// MARK: These: Pointed
+
+extension These: Pointed {
+	public typealias PointedValue = B
+}


// MARK: - TheseType

public protocol TheseType {
	associatedtype ThisType
	associatedtype ThatType
	

	static func both(x: ThisType, _ y: ThatType) -> Self
	
	func these<T>(@noescape ifThis ifThis: ThisType throws -> T, ifThat: ThatType throws -> T, ifBoth: (ThisType, ThatType) throws -> T) rethrows -> T
}

// MARK: - TheseType: Pointed

public extension TheseType {
	public static func pure(x: ThatType) -> Self {
		return .that(x)
	}
}

// MARK: - TheseType - method
