fn snapshotted<F>(&mut self, op: F) -> ExplorationResult
    where
        F: FnOnce(&mut Self) -> ExplorationResult,
    {
        let snapshot = self.infer.snapshot();
        let result = op(self);
        self.infer.rollback_to(snapshot);
        result
    }
/// Creates an inference snapshot and executes `op`, rolling back
/// the snapshot afterwards. This is generally safe to use in any
/// context where we are doing exploring (hence the return type),
/// since -- due to the nature of the EWFS algorithm -- any result
/// that may escape a stack frame (e.g., by being stored in a
/// table) is canonicalized first.
Creates an inference snapshot and executes `op`, rolling back
the snapshot afterwards. This is generally safe to use in any
context where we are doing exploring (hence the return type),
since -- due to the nature of the EWFS algorithm -- any result
that may escape a stack frame  is canonicalized first.
Creates an inference snapshot and executes ` op ` rolling back the snapshot afterwards . This is generally safe to use in any context where we are doing exploring ( hence the return type ) since -- due to the nature of the EWFS algorithm -- any result that may escape a stack frame is canonicalized first .
fn snapshotted<F>(&mut self, op: F) -> ExplorationResult
    where
        F: FnOnce(&mut Self) -> ExplorationResult,
    {
        let snapshot = self.infer.snapshot();
        let result = op(self);
        self.infer.rollback_to(snapshot);
        result
    }
fn snapshotted < F > ( & mut self , op : F ) -> ExplorationResult where F : FnOnce ( & mut Self ) -> ExplorationResult , { let snapshot = self . infer . snapshot ( ) ; let result = op ( self ) ; self . infer . rollback_to ( snapshot ) ; result }
Creates an inference snapshot and executes `op`, rolling back
the snapshot afterwards.
Creates an inference snapshot and executes ` op ` rolling back the snapshot afterwards .
&mut self
op
F