pub trait Lay {
// Provided methods
fn lay<T>(self, f: impl FnOnce(&mut Self) -> T) -> Self
where Self: Sized { ... }
fn lay_try<T, E>(
self,
f: impl FnOnce(&mut Self) -> Result<T, E>
) -> Result<Self, E>
where Self: Sized { ... }
fn lay_maybe<T>(
self,
f: impl FnOnce(&mut Self) -> Option<T>
) -> Option<Self>
where Self: Sized { ... }
}