anchor.diff:          match dct.TryGetValue k with
           | true, v -> Some v
           | _       -> None
  +
  +    let keys   (source: IReadOnlyDictionary<_,_>) = Seq.map (fun (KeyValue(k, _)) -> k) source
  +    let values (source: IReadOnlyDictionary<_,_>) = Seq.map (fun (KeyValue(_, v)) -> v) source
   
       let map f (x: IReadOnlyDictionary<'Key, 'T>) =
           let dct = Dictionary<'Key, 'U> ()
  
positive.code: ﻿namespace FSharpPlus
  
  open System
  
  
negative.code:     let map mapping (source: IReadOnlyCollection<'T>) = Seq.map mapping source |> Seq.toArray :> IReadOnlyCollection<'U>
  
  
  /// Additional operations on ReadOnlyList<'T>
  [<RequireQualifiedAccess>]
  module IReadOnlyList =
      open System.Collections.Generic
  
      let ofArray (source: _ array) = IList.toIReadOnlyList source
      let toArray (source: IReadOnlyList<_>) = Array.ofSeq source
  
      /// Returns a new IReadOnlyList from a given IReadOnlyList, with replaced binding for index.
      let add i value (source: IReadOnlyList<_>) =
          let setNth i v (source: _ array) = source.[i] <- v; source
          if 0 <= i && i < source.Count then
              source |> Array.ofSeq |> setNth i value |> ofArray |> Some
          else None
  
      let tryItem i (source: IReadOnlyList<_>) =
          if 0 <= i && i < source.Count then Some source.[i]
          else None
  
  
  /// Additional operations on Map<'Key, 'Value>
  [<RequireQualifiedAccess>]
  module Map =
  
      let keys   (source: Map<_,_>) = Seq.map (fun (KeyValue(k, _)) -> k) source
      let values (source: Map<_,_>) = Seq.map (fun (KeyValue(_, v)) -> v) source
  
      /// <summary>Map values of the original Map.</summary>
      /// <remarks>Keys remain unchanged.</remarks>
  