anchor.diff:          static member (=>) (screen : Screen, layerNameStr) = screen => !!layerNameStr
       
       /// Forms a logical layer of entities.
  -    and [<StructuralEquality; NoComparison>] Layer =
  +    and [<CustomEquality; NoComparison>] Layer =
           { LayerAddress : Layer Address }
       
           interface Simulant with
               member this.ParticipantAddress = atoa<Layer, Participant> this.LayerAddress
               member this.SimulantAddress = atoa<Layer, Simulant> this.LayerAddress
               end
  -    
  -        /// View as address string.
  +
  +        override this.Equals that =
  +            match that with
  +            | :? Layer as that -> this.LayerAddress == that.LayerAddress
  +            | _ -> failwithumf ()
  +
  +        override this.GetHashCode () = this.LayerAddress.GetHashCode ()
  +    
           override this.ToString () = scstring this.LayerAddress
       
           /// Get the name of a layer proxy.
  
positive.code:         static member acatf<'a> (address : 'a Address) (game : Game) = acatf address (atooa game.GameAddress)
          
          /// Concatenate two addresses, forcing the type of first address.
          static member acatff<'a> (address : 'a Address) (entity : Entity) = acatff address entity.EntityAddress
      
          /// Concatenate two addresses, taking the type of first address.
          static member (->-) (address, game) = Game.acatf address game
  
negative.code:         static member acatf<'a> (address : 'a Address) (screen : Screen) = acatf address (atooa screen.ScreenAddress)
          
          /// Concatenate two addresses, forcing the type of first address.
          static member acatff<'a> (address : 'a Address) (screen : Screen) = acatff address screen.ScreenAddress
      
          /// Concatenate two addresses, taking the type of first address.
          static member (->-) (address, screen) = Screen.acatf address screen
  