anchor.diff:                  struct (violation, world)
           | Some violation -> struct (violation, world)
   
  +    let evalGetScreensBinding fnName exprs originOpt world =
  +        let struct (evaleds, world) = World.evalManyInternal exprs world
  +        match Array.tryFind (function Scripting.Violation _ -> true | _ -> false) evaleds with
  +        | None ->
  +            match evaleds with
  +            | [||] -> getScreens  world
  +            | _ ->
  +                let violation = Scripting.Violation (["InvalidBindingInvocation"], "Incorrect number of arguments for binding '" + fnName + "' at:\n" + SymbolOrigin.tryPrint originOpt, None)
  +                struct (violation, world)
  +        | Some violation -> struct (violation, world)
  +
  +    let evalSetScreenDissolveBinding fnName exprs originOpt world =
  +        let struct (evaleds, world) = World.evalManyInternal exprs world
  +        match Array.tryFind (function Scripting.Violation _ -> true | _ -> false) evaleds with
  +        | None ->
  +            match evaleds with
  +            | [|dissolveData; screen|] -> setScreenDissolve dissolveData screen world
  +            | _ ->
  +                let violation = Scripting.Violation (["InvalidBindingInvocation"], "Incorrect number of arguments for binding '" + fnName + "' at:\n" + SymbolOrigin.tryPrint originOpt, None)
  +                struct (violation, world)
  +        | Some violation -> struct (violation, world)
  +
  +    let evalDestroyScreenBinding fnName exprs originOpt world =
  +        let struct (evaleds, world) = World.evalManyInternal exprs world
  +        match Array.tryFind (function Scripting.Violation _ -> true | _ -> false) evaleds with
  +        | None ->
  +            match evaleds with
  +            | [|screen|] -> destroyScreen screen world
  +            | _ ->
  +                let violation = Scripting.Violation (["InvalidBindingInvocation"], "Incorrect number of arguments for binding '" + fnName + "' at:\n" + SymbolOrigin.tryPrint originOpt, None)
  +                struct (violation, world)
  +        | Some violation -> struct (violation, world)
  +
  +    let evalCreateScreenBinding fnName exprs originOpt world =
  +        let struct (evaleds, world) = World.evalManyInternal exprs world
  +        match Array.tryFind (function Scripting.Violation _ -> true | _ -> false) evaleds with
  +        | None ->
  +            match evaleds with
  +            | [|dispatcherName; nameOpt|] -> createScreen dispatcherName nameOpt world
  +            | _ ->
  +                let violation = Scripting.Violation (["InvalidBindingInvocation"], "Incorrect number of arguments for binding '" + fnName + "' at:\n" + SymbolOrigin.tryPrint originOpt, None)
  +                struct (violation, world)
  +        | Some violation -> struct (violation, world)
  +
  +    let evalCreateDissolveScreenBinding fnName exprs originOpt world =
  +        let struct (evaleds, world) = World.evalManyInternal exprs world
  +        match Array.tryFind (function Scripting.Violation _ -> true | _ -> false) evaleds with
  +        | None ->
  +            match evaleds with
  +            | [|dispatcherName; nameOpt; dissolveData|] -> createDissolveScreen dispatcherName nameOpt dissolveData world
  +            | _ ->
  +                let violation = Scripting.Violation (["InvalidBindingInvocation"], "Incorrect number of arguments for binding '" + fnName + "' at:\n" + SymbolOrigin.tryPrint originOpt, None)
  +                struct (violation, world)
  +        | Some violation -> struct (violation, world)
  +
       let evalWriteScreenToFileBinding fnName exprs originOpt world =
           let struct (evaleds, world) = World.evalManyInternal exprs world
           match Array.tryFind (function Scripting.Violation _ -> true | _ -> false) evaleds with
  
positive.code:              ("isSimulantSelected", { Fn = evalIsSimulantSelectedBinding; Pars = [|"simulant"|]; DocOpt = None })
               ("writeGameToFile", { Fn = evalWriteGameToFileBinding; Pars = [|"filePath"|]; DocOpt = None })
               ("readGameFromFile", { Fn = evalReadGameFromFileBinding; Pars = [|"filePath"|]; DocOpt = None })
               ("writeScreenToFile", { Fn = evalWriteScreenToFileBinding; Pars = [|"filePath"; "screen"|]; DocOpt = None })
               ("readScreenFromFile", { Fn = evalReadScreenFromFileBinding; Pars = [|"filePath"; "nameOpt"|]; DocOpt = None })
               ("getScreens", { Fn = evalGetScreensBinding; Pars = [||]; DocOpt = None })
               ("setScreenDissolve", { Fn = evalSetScreenDissolveBinding; Pars = [|"dissolveData"; "screen"|]; DocOpt = None })
               ("destroyScreen", { Fn = evalDestroyScreenBinding; Pars = [|"screen"|]; DocOpt = None })
               ("createScreen", { Fn = evalCreateScreenBinding; Pars = [|"dispatcherName"; "nameOpt"|]; DocOpt = None })
               ("createDissolveScreen", { Fn = evalCreateDissolveScreenBinding; Pars = [|"dispatcherName"; "nameOpt"; "dissolveData"|]; DocOpt = None })
               ("getLayers", { Fn = evalGetLayersBinding; Pars = [|"screen"|]; DocOpt = None })
               ("destroyLayer", { Fn = evalDestroyLayerBinding; Pars = [|"layer"|]; DocOpt = None })
               ("destroyLayers", { Fn = evalDestroyLayersBinding; Pars = [|"layers"|]; DocOpt = None })
  
negative.code:         "destroy getSelected tryGetParent getParent " +
          "tryGetGrandparent getGrandparent getChildren getExists " +
          "getEntities0 getLayers0 isSimulantSelected writeGameToFile " +
          "readGameFromFile getScreens setScreenDissolve destroyScreen " +
          "createScreen createDissolveScreen writeScreenToFile readScreenFromFile " +
          "getLayers destroyLayer destroyLayers writeLayerToFile " +
          "readLayerFromFile getEntities destroyEntity destroyEntities " +
          "tryPickEntity writeEntityToFile createEntity readEntityFromFile " +
  