anchor.diff:          | _ -> failwith "Using a custom derivative of the DesigntimeFarkle interface is not allowed."
       let append xs df = ImmutableList.add xs (specialize df)
   
  -/// <summary>Functions to manipulate `DesigntimeFarkle`s.</summary>
  -/// <remarks>Warning: Specifying any metadata on the grammar has to be done
  -/// only at the topmost <see cref="DesigntimeFarkle{T}"/>. Otherwise they
  -/// will be disregarded.</remarks>
  +/// Functions to manipulate `DesigntimeFarkle`s.
  +/// Keep in mind that only the metadata of the _topmost_
  +/// designtime Farkle matter. Any other metadata changes will be disregarded.
   module DesigntimeFarkle =
  +
  +    /// Sets a custom `GrammarMetadata` object to an untyped `DesigntimeFarkle`.
  +    let withMetadataUntyped metadata df =
  +        {new DesigntimeFarkleWithMetadata with
  +            member _.InnerDesigntimeFarkle = df
  +            member _.Name = df.Name
  +            member _.Metadata = metadata} :> DesigntimeFarkle
   
       /// Sets a custom `GrammarMetadata` object to a `DesigntimeFarkle<T>`.
       let withMetadata metadata df =
  
positive.code:     /// <summary>The associated <see cref="GrammarMetadata"/> object.</summary>
      abstract Metadata: GrammarMetadata
  
  /// <summary>The base, untyped interface of <see cref="Terminal{T}"/>.</summary>
  /// <seealso cref="Terminal{T}"/>
  type internal AbstractTerminal =
  
negative.code:         match df with
          | :? DesigntimeFarkleWithMetadata<'T> as dfwm -> dfwm
          | _ -> {InnerDesigntimeFarkle = df; Metadata = GrammarMetadata.Default}
      interface DesigntimeFarkle with
          member x.Name = x.InnerDesigntimeFarkle.Name
          member x.Metadata = x.Metadata
      interface DesigntimeFarkleWithMetadata with
          member x.InnerDesigntimeFarkle = upcast x.InnerDesigntimeFarkle
      interface DesigntimeFarkle<'T>
  
  [<NoComparison; ReferenceEquality>]
  /// <summary>A terminal symbol.</summary>
  