anchor.diff:  module private ScriptPreprocessClosure = 
       open Internal.Utilities.Text.Lexing
       
  -    type ClosureDirective = 
  -        | SourceFile of string * range * string // filename, range, source text
  -        | ClosedSourceFile of string * range * ParsedInput option * PhasedError list * PhasedError list * (string * range) list // filename, range, errors, warnings, nowarns
  +    /// Represents an input to the closure finding process
  +    type ClosureSource = ClosureSource of filename: string * referenceRange: range * sourceText: string * parseRequired: bool 
           
  +    /// Represents an output of the closure finding process
  +    type ClosureFile = ClosureFile  of string * range * ParsedInput option * PhasedError list * PhasedError list * (string * range) list // filename, range, errors, warnings, nowarns
  +
       type Observed() =
           let seen = System.Collections.Generic.Dictionary<_,bool>()
           member ob.SetSeen(check) = 
  
positive.code:                 else Some(m,path)
              with e -> errorRecovery e m; None
          tcConfig.loadedSources 
          |> List.map resolveLoadedSource 
          |> List.filter Option.isSome 
          |> List.map Option.get                
          |> List.distinct     
  
      /// A closed set of assemblies where, for any subset S:
  
negative.code:         let rootWarnings = rootWarnings |> List.filter isRootRange
          
          let result : LoadClosure = 
              { SourceFiles = List.groupByFirst sourceFiles
                References = List.groupByFirst references
                UnresolvedReferences = unresolvedReferences
                Inputs = sourceInputs
                NoWarns = List.groupByFirst globalNoWarns
                RootErrors = rootErrors
                RootWarnings = rootWarnings}       
  
  