pub fn drive<T: FuncValidator>(
    module: &ModuleContext,
    func: &Func,
    body: &FuncBody
) -> Result<T::Output, Error>