Каков самый элегантный способ работы с внешней библиотекой с внутренним состоянием с использованием языка программирования функций?

В настоящее время я играю с разработкой Scala, но мне нужно интегрироваться с библиотеками, такими как box2d, для обработки физики. Проблема в том, что для этого требуется зависимость от внешней библиотеки, которая управляет своим собственным состоянием. Вы следите за телами, которые вы переходите в мир box2d. Подводя итог аспектам игры:

  • Box2d управляет состоянием в мире и изменяет их после каждого тика/шага
  • Вы создаете (используя FP) тела, которые передаются в этот мир
  • Box2d изменяет состояние этих органов внутри страны
  • Чтобы отслеживать объекты, на которые вы ссылаетесь,
  • Вы, скорее всего, захотите использовать информацию в телах для визуализации своего кода, поэтому я бы предположил, что единственный способ отслеживать эту информацию - отслеживать все ссылки в изменяемой коллекции. Он должен выжить во всех кадрах.

Итак, мой вопрос:

Как вы можете отслеживать эти ссылки элегантным способом (для функционального программирования) и как вы можете минимизировать эффект, который он имеет на чистоту в остальной части вашего кода?

Вещи, подобные государственным монадам, не помогут мне здесь. Думаю,

Ответ 1

Самый практичный способ состоит в том, чтобы определить, какие инварианты должны выполняться для нечистых действий, которые должны быть инкапсулированы без утечки факта, что есть побочные эффекты, а затем, когда у вас есть доказательства, которые имеют место, скрывают состояние внутри "небезопасногоPerformIO" ".

Альтернативой является раскрытие факта наличия внутреннего состояния, например. явный токен "я был инициализирован", который является неприступным и неприменимым, чтобы гарантировать линейный доступ к базовому ресурсу.