anchor.diff:      member pe.IsPhaseInCompile() = 
           let isPhaseInCompile = 
               match pe.Phase with
  -            | Compile | Parameter | Parse | TypeCheck -> true
  +            | BuildPhase.Compile | BuildPhase.Parameter | BuildPhase.Parse | BuildPhase.TypeCheck -> true
               | _ -> false
           // Sanity check ensures that Phase matches Subcategory            
   #if DEBUG
  
positive.code:     // The 'Impl' factoring enables a developer to place a breakpoint at the non-Impl 
      // code just below and get a breakpoint for all error logger implementations.
      abstract DiagnosticSink: phasedError: PhasedDiagnostic * isError: bool -> unit
      member this.DebugDisplay() = sprintf "ErrorLogger(%s)" nameForDebugging
  
  let DiscardErrorsLogger = 
      { new ErrorLogger("DiscardErrorsLogger") with 
  
negative.code:     let newInstalled = ref true
      let newIsInstalled() = if !newInstalled then () else (assert false; (); (*failwith "error logger used after unwind"*)) // REVIEW: ok to throw?
      let chkErrorLogger = { new ErrorLogger("PushErrorLoggerPhaseUntilUnwind") with
                               member __.DiagnosticSink(phasedError, isError) = newIsInstalled(); newErrorLogger.DiagnosticSink(phasedError, isError)
                               member __.ErrorCount = newIsInstalled(); newErrorLogger.ErrorCount }
  
      CompileThreadStatic.ErrorLogger <- chkErrorLogger
  
      { new System.IDisposable with 
           member __.Dispose() =
              CompileThreadStatic.ErrorLogger <- oldErrorLogger
              newInstalled := false }
  
  