anchor.diff:                                   Entity.Text <== selection --> fun (_, itemType) -> ItemType.getName itemType
                                    Entity.Justification == Justified (JustifyLeft, JustifyMiddle)
                                    Entity.Margins == v2 16.0f 0.0f
  -                                 Entity.ClickEvent ==> msg (ShopConfirmPrompt (false, selection))])]
  +                                 Entity.ClickEvent ==> msg (ShopConfirmPrompt selection)])]
   
                    // shop confirm
                    Content.panel Simulants.FieldShopConfirm.Name
  
positive.code:                      Entity.Visible <== model --> fun model -> Option.isSome model.ShopModelOpt
                       Entity.Enabled <== model --> fun model -> match model.ShopModelOpt with Some shopModel -> Option.isNone shopModel.ShopConfirmModelOpt | None -> true]
                      [Content.button Simulants.FieldShopBuy.Name
                          [Entity.PositionLocal == v2 12.0f 440.0f; Entity.DepthLocal == 2.0f; Entity.Text == "Buy"]
                       Content.button Simulants.FieldShopSell.Name
                          [Entity.PositionLocal == v2 320.0f 440.0f; Entity.DepthLocal == 2.0f; Entity.Text == "Sell"]
                       Content.button Simulants.FieldShopLeave.Name
                          [Entity.PositionLocal == v2 628.0f 440.0f; Entity.DepthLocal == 2.0f; Entity.Text == "Leave"
                           Entity.ClickEvent ==|> fun _ -> msg ShopLeave]
                       Content.text Gen.name
                          [Entity.PositionLocal == v2 12.0f 440.0f; Entity.DepthLocal == 1.0f; Entity.Text == "Buy..."; Entity.Justification == Justified (JustifyCenter, JustifyMiddle)]
                       Content.text Gen.name
                          [Entity.PositionLocal == v2 320.0f 440.0f; Entity.DepthLocal == 1.0f; Entity.Text == "Sell..."; Entity.Justification == Justified (JustifyCenter, JustifyMiddle)]
                       Content.text Simulants.FieldShopGold.Name
                          [Entity.PositionLocal == v2 316.0f 12.0f; Entity.DepthLocal == 1.0f; Entity.Text <== model --> (fun model -> string model.Inventory.Gold + "G"); Entity.Justification == Justified (JustifyCenter, JustifyMiddle)]
                       Content.button Simulants.FieldShopPageUp.Name
                          [Entity.PositionLocal == v2 16.0f 12.0f; Entity.DepthLocal == 1.0f; Entity.Text == "<"; Entity.Size == v2 48.0f 64.0f
                           Entity.ClickEvent ==> msg ShopPageUp]
                       Content.button Simulants.FieldShopPageDown.Name
                          [Entity.PositionLocal == v2 832.0f 12.0f; Entity.DepthLocal == 1.0f; Entity.Text == ">"; Entity.Size == v2 48.0f 64.0f
                           Entity.ClickEvent ==> msg ShopPageDown]
                       Content.entities model
                          (fun (model : FieldModel) -> (model.ShopModelOpt, model.Inventory))
                          (fun (shopModelOpt, inventory : Inventory) _ ->
  
negative.code:                 let model = FieldModel.updateShopModelOpt (Option.map (fun shopModel -> { shopModel with ShopPage = inc shopModel.ShopPage })) model
                  just model
  
              | ShopConfirmPrompt selectionLens ->
                  let selection = Lens.get selectionLens world
                  let model =
                      FieldModel.updateShopModelOpt (Option.map (fun shopModel ->
                          let buying = match shopModel.ShopState with ShopBuying -> true | ShopSelling -> false
                          let shopConfirmModelOpt = ShopConfirmModel.tryMakeFromSelection buying selection
                          { shopModel with ShopConfirmModelOpt = shopConfirmModelOpt }))
                          model
  