anchor.diff:  [<NoComparison; NoEquality>]
   type LexerWhitespaceContinuation = 
       | Token            of LexerIfdefStackEntries
  -    | IfDefSkip        of LexerIfdefStackEntries * int * range
  -    | String           of LexerIfdefStackEntries * range
  -    | VerbatimString   of LexerIfdefStackEntries * range
  -    | TripleQuoteString of LexerIfdefStackEntries * range
  -    | Comment          of LexerIfdefStackEntries * int * range
  -    | SingleLineComment of LexerIfdefStackEntries * int * range
  -    | StringInComment    of LexerIfdefStackEntries * int * range
  -    | VerbatimStringInComment   of LexerIfdefStackEntries * int * range
  -    | TripleQuoteStringInComment   of LexerIfdefStackEntries * int * range
  -    | MLOnly            of LexerIfdefStackEntries * range
  +    | IfDefSkip        of LexerIfdefStackEntries * int * range:range
  +    | String           of LexerIfdefStackEntries * range:range
  +    | VerbatimString   of LexerIfdefStackEntries * range:range
  +    | TripleQuoteString of LexerIfdefStackEntries * range:range
  +    | Comment          of LexerIfdefStackEntries * int * range:range
  +    | SingleLineComment of LexerIfdefStackEntries * int * range:range
  +    | StringInComment    of LexerIfdefStackEntries * int * range:range
  +    | VerbatimStringInComment   of LexerIfdefStackEntries * int * range:range
  +    | TripleQuoteStringInComment   of LexerIfdefStackEntries * int * range:range
  +    | MLOnly            of LexerIfdefStackEntries * range:range
       | EndLine           of LexerEndlineContinuation
       
       member x.LexerIfdefStack =
  
positive.code:     /// Get the syntactic range of source code covered by this construct.
      member e.Range = 
          match e with 
          | SynExpr.Paren (range=r)
          | SynExpr.Quote (range=r)
          | SynExpr.Const (range=r)
          | SynExpr.Typed (range=r)
          | SynExpr.Tuple (range=r)
          | SynExpr.ArrayOrList (range=r)
          | SynExpr.Record (range=r)
          | SynExpr.New (range=r)
          | SynExpr.ObjExpr (range=r)
          | SynExpr.While (range=r)
          | SynExpr.For (range=r)
          | SynExpr.ForEach (range=r)
          | SynExpr.CompExpr (range=r)
          | SynExpr.ArrayOrListOfSeqExpr (range=r)
          | SynExpr.Lambda (range=r)
          | SynExpr.Match (range=r)
          | SynExpr.MatchLambda (range=r)
          | SynExpr.Do (range=r)
          | SynExpr.Assert (range=r)
          | SynExpr.App (range=r)
          | SynExpr.TypeApp (range=r)
          | SynExpr.LetOrUse (range=r)
          | SynExpr.TryWith (range=r)
          | SynExpr.TryFinally (range=r)
          | SynExpr.Sequential (range=r)
          | SynExpr.ArbitraryAfterError (range=r)
          | SynExpr.FromParseError (range=r)
          | SynExpr.DiscardAfterMissingQualificationAfterDot (range=r)
          | SynExpr.IfThenElse (range=r)
          | SynExpr.LongIdent (range=r)
          | SynExpr.LongIdentSet (range=r)
          | SynExpr.NamedIndexedPropertySet (range=r)
          | SynExpr.DotIndexedGet (range=r)
          | SynExpr.DotIndexedSet (range=r)
          | SynExpr.DotGet (range=r)
          | SynExpr.DotSet (range=r)
          | SynExpr.DotNamedIndexedPropertySet (range=r)
          | SynExpr.LibraryOnlyUnionCaseFieldGet (range=r)
          | SynExpr.LibraryOnlyUnionCaseFieldSet (range=r)
          | SynExpr.LibraryOnlyILAssembly (range=r)
          | SynExpr.LibraryOnlyStaticOptimization (range=r)
          | SynExpr.TypeTest (range=r)
          | SynExpr.Upcast (range=r)
          | SynExpr.AddressOf (range=r)
          | SynExpr.Downcast (range=r)
          | SynExpr.JoinIn (range=r)
          | SynExpr.InferredUpcast (range=r)
          | SynExpr.InferredDowncast (range=r)
          | SynExpr.Null r
          | SynExpr.Lazy (range=r)
          | SynExpr.TraitCall (range=r)
          | SynExpr.ImplicitZero r
          | SynExpr.YieldOrReturn (range=r)
          | SynExpr.YieldOrReturnFrom (range=r)
          | SynExpr.LetOrUseBang  (range=r)
          | SynExpr.DoBang  (range=r) -> r
          | SynExpr.Ident id -> id.idRange
      /// range ignoring any (parse error) extra trailing dots
      member e.RangeSansAnyExtraDot = 
          match e with 
          | SynExpr.Paren (range=r)
          | SynExpr.Quote (range=r)
          | SynExpr.Const (range=r)
          | SynExpr.Typed (range=r)
          | SynExpr.Tuple (range=r)
          | SynExpr.ArrayOrList (range=r)
          | SynExpr.Record (range=r)
          | SynExpr.New (range=r)
          | SynExpr.ObjExpr (range=r)
          | SynExpr.While (range=r)
          | SynExpr.For (range=r)
          | SynExpr.ForEach (range=r)
          | SynExpr.CompExpr (range=r)
          | SynExpr.ArrayOrListOfSeqExpr (range=r)
          | SynExpr.Lambda (range=r)
          | SynExpr.Match (range=r)
          | SynExpr.MatchLambda (range=r)
          | SynExpr.Do (range=r)
          | SynExpr.Assert (range=r)
          | SynExpr.App (range=r)
          | SynExpr.TypeApp (range=r)
          | SynExpr.LetOrUse (range=r)
          | SynExpr.TryWith (range=r)
          | SynExpr.TryFinally (range=r)
          | SynExpr.Sequential (range=r)
          | SynExpr.ArbitraryAfterError (range=r)
          | SynExpr.FromParseError (range=r) 
          | SynExpr.IfThenElse (range=r)
          | SynExpr.LongIdentSet (range=r)
          | SynExpr.NamedIndexedPropertySet (range=r)
          | SynExpr.DotIndexedGet (range=r)
          | SynExpr.DotIndexedSet (range=r)
          | SynExpr.DotSet (range=r)
          | SynExpr.DotNamedIndexedPropertySet (range=r)
          | SynExpr.LibraryOnlyUnionCaseFieldGet (range=r)
          | SynExpr.LibraryOnlyUnionCaseFieldSet (range=r)
          | SynExpr.LibraryOnlyILAssembly (range=r)
          | SynExpr.LibraryOnlyStaticOptimization (range=r)
          | SynExpr.TypeTest (range=r)
          | SynExpr.Upcast (range=r)
          | SynExpr.AddressOf (range=r)
          | SynExpr.Downcast (range=r)
          | SynExpr.JoinIn (range=r)
          | SynExpr.InferredUpcast (range=r)
          | SynExpr.InferredDowncast (range=r)
          | SynExpr.Null r
          | SynExpr.Lazy (range=r)
          | SynExpr.TraitCall (range=r)
          | SynExpr.ImplicitZero r
          | SynExpr.YieldOrReturn (range=r)
          | SynExpr.YieldOrReturnFrom (range=r)
          | SynExpr.LetOrUseBang (range=r)
          | SynExpr.DoBang  (range=r) -> r
          | SynExpr.DotGet (expr,_,lidwd,m) -> if lidwd.ThereIsAnExtraDotAtTheEnd then unionRanges expr.Range lidwd.RangeSansAnyExtraDot else m
          | SynExpr.LongIdent (_,lidwd,_,_) -> lidwd.RangeSansAnyExtraDot 
          | SynExpr.DiscardAfterMissingQualificationAfterDot (expr,_) -> expr.Range
  
negative.code: 
      member d.Range = 
          match d with 
          | SynModuleSigDecl.ModuleAbbrev (range=m)
          | SynModuleSigDecl.NestedModule (range=m)
          | SynModuleSigDecl.Val (range=m)
          | SynModuleSigDecl.Types (range=m)
          | SynModuleSigDecl.Exception (range=m)
          | SynModuleSigDecl.Open (range=m)
          | SynModuleSigDecl.NamespaceFragment (SynModuleOrNamespaceSig (range=m)) 
          | SynModuleSigDecl.HashDirective (range=m) -> m
  
  and SynModuleSigDecls = SynModuleSigDecl list
  
  