pub fn lam<T1>(span: ByteSpan, params: Vec<Named<Name, RcKind>>, body_ty: T1) -> RcType
    where
        T1: Into<RcType>,
    {
        let mut body_ty = body_ty.into();

        {
            let param_names = params
                .iter()
                .map(|param| param.name.clone())
                .collect::<Vec<_>>();
            body_ty.abstract_names(&param_names[..]);
        }

        Type::Lam(span, params, body_ty).into()
    }
/// Type level lambda abstraction: eg. `\(a, ..) -> T`
Type level lambda abstraction: eg.
Type level lambda abstraction : eg .
pub fn lam<T1>(span: ByteSpan, params: Vec<Named<Name, RcKind>>, body_ty: T1) -> RcType
    where
        T1: Into<RcType>,
    {
        let mut body_ty = body_ty.into();
        {
            let param_names = params
                .iter()
                .map(|param| param.name.clone())
                .collect::<Vec<_>>();
            body_ty.abstract_names(&param_names[..]);
        }
        Type::Lam(span, params, body_ty).into()
    }
pub fn lam < T1 > ( span : ByteSpan , params : Vec < Named < Name , RcKind > > , body_ty : T1 ) -> RcType where T1 : Into < RcType > , { let mut body_ty = body_ty . into ( ) ; { let param_names = params . iter ( ) . map ( | param | param . name . clone ( ) ) . collect :: < Vec < _ > > ( ) ; body_ty . abstract_names ( & param_names [ .. ] ) ; } Type :: Lam ( span , params , body_ty ) . into ( ) }
Type level lambda abstraction: eg.
Type level lambda abstraction : eg .
span
ByteSpan
params
Vec<Named<Name, RcKind>>
body_ty
T1
span
ByteSpan
params
Vec<Named<Name, RcKind>>
body_ty
T1