pub trait FnFactory<In, Out>{
type Fn;
// Required methods
fn generate(&mut self, input: In) -> Self::Fn;
fn boxed(self) -> BoxFnFactory<In, Out>
where Self: 'static + Send;
fn chain<GOut, G>(self, other: G) -> BoxFnFactory<In, GOut>
where Self: 'static + Send + Sized,
G: 'static + Send + Clone + FnFactory<Out, GOut>,
GOut: 'static + Send,
G::Fn: 'static + Send + FnOnce() -> GOut;
}