1 //! This module contains impls of `Fold` for those types that
4 //! The more interesting impls of `Fold` remain in the `fold` module.
8 impl<I
: Interner
> Fold
<I
> for FnPointer
<I
> {
9 type Result
= FnPointer
<I
>;
12 folder
: &mut dyn Folder
<'i
, I
>,
13 outer_binder
: DebruijnIndex
,
14 ) -> Fallible
<Self::Result
>
25 substitution
: substitution
.fold_with(folder
, outer_binder
.shifted_in())?
,
29 variadic
: sig
.variadic
,
35 impl<T
, I
: Interner
> Fold
<I
> for Binders
<T
>
37 T
: HasInterner
<Interner
= I
> + Fold
<I
>,
38 <T
as Fold
<I
>>::Result
: HasInterner
<Interner
= I
>,
41 type Result
= Binders
<T
::Result
>;
44 folder
: &mut dyn Folder
<'i
, I
>,
45 outer_binder
: DebruijnIndex
,
46 ) -> Fallible
<Self::Result
>
51 binders
: self_binders
,
54 let value
= self_value
.fold_with(folder
, outer_binder
.shifted_in())?
;
55 let binders
= VariableKinds
{
56 interned
: self_binders
.interned().clone(),
58 Ok(Binders
::new(binders
, value
))
62 impl<I
, T
> Fold
<I
> for Canonical
<T
>
65 T
: HasInterner
<Interner
= I
> + Fold
<I
>,
66 <T
as Fold
<I
>>::Result
: HasInterner
<Interner
= I
>,
68 type Result
= Canonical
<T
::Result
>;
71 folder
: &mut dyn Folder
<'i
, I
>,
72 outer_binder
: DebruijnIndex
,
73 ) -> Fallible
<Self::Result
>
78 binders
: self_binders
,
81 let value
= self_value
.fold_with(folder
, outer_binder
.shifted_in())?
;
82 let binders
= CanonicalVarKinds
{
83 interned
: self_binders
.interned().clone(),
85 Ok(Canonical { binders, value }
)