intersect

fun <C : CallableDescriptor> C.intersect(eq: Eq<KotlinType>, types: KotlinBuiltIns.() -> List<KotlinType>): List<KotlinType>

Given eq this function returns KotlinTypes that intersect with the returnType from the list in types. One concrete example for equality on TypeConstructor may look like this:

import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
import arrow.meta.phases.analysis.Eq
import arrow.meta.phases.analysis.intersect
//sampleStart

fun typeConstructorEq(): Eq<KotlinType> =
Eq { t1, t2 ->
t1.constructor == t2.constructor
}

/**
* this function yields true if the type constructor - short [TC] - of the returnType in F is equal to one TC in [types]
*/
fun <F : CallableDescriptor> F.returns( //
types: KotlinBuiltIns.() -> List<KotlinType>
): Boolean =
intersect(typeConstructorEq(), types).isNotEmpty()
//sampleEnd

See also

org.jetbrains.kotlin.types.TypeUtils

for more abstractions

functionTypeEq

Parameters

eq

can be define for e.g.: TypeConstructor, MemberScope or typeArguments List<TypeProjection>, etc.


fun <D : DeclarationDescriptor> D.intersect(eq: Eq<KotlinType>, list: List<KotlinType>, other: KotlinBuiltIns.() -> List<KotlinType>): List<KotlinType>

given eq this function returns a List of KotlinType that are contained by both list and other

See also

Parameters

eq

can be defined for TypeConstructor, MemberScope or typeArguments List<TypeProjection>, etc.