anchor.diff:  let private FoldHierarchyOfTypeAux followInterfaces allowMultiIntfInst skipUnref visitor g amap m ty acc =
       let rec loop ndeep ty ((visitedTycon, visited: TyconRefMultiMap<_>, acc) as state) =
   
  -        let seenThisTycon = isAppTy g ty && Set.contains (tcrefOfAppTy g ty).Stamp visitedTycon
  +        let seenThisTycon = 
  +            match tryTcrefOfAppTy g ty with
  +            | ValueSome tcref -> Set.contains tcref.Stamp visitedTycon
  +            | _ -> false
   
           // Do not visit the same type twice. Could only be doing this if we've seen this tycon
           if seenThisTycon && List.exists (typeEquiv g ty) (visited.Find (tcrefOfAppTy g ty)) then state else
  
positive.code:         if seenThisTycon && allowMultiIntfInst = AllowMultiIntfInstantiations.No then state else
  
          let state =
              if isAppTy g ty then
                  let tcref = tcrefOfAppTy g ty
                  let visitedTycon = Set.add tcref.Stamp visitedTycon
                  visitedTycon, visited.Add (tcref, ty), acc
              else
                  state
  
          if ndeep > 100 then (errorR(Error((FSComp.SR.recursiveClassHierarchy (showType ty)), m)); (visitedTycon, visited, acc)) else
  
negative.code: 
  /// Indicates if an F# type is the type associated with an F# exception declaration
  let isExnDeclTy g ty =
      match tryTcrefOfAppTy g ty with
      | ValueSome tcref -> tcref.IsExceptionDecl
      | _ -> false
  
  /// Get the base type of a type, taking into account type instantiations. Return None if the
  /// type has no base type.
  let GetSuperTypeOfType g amap m ty =
  #if !NO_EXTENSIONTYPING
      let ty =
          match tryTcrefOfAppTy g ty with
          | ValueSome tcref when tcref.IsProvided -> stripTyEqns g ty 
          | _ -> stripTyEqnsAndMeasureEqns g ty
  #else
      let ty = stripTyEqnsAndMeasureEqns g ty
  #endif
  