Представьте себе библиотеку в OCaml, которая может потребоваться для хранения своих данных. Этот уровень персистентности можно реализовать с помощью разных библиотек (sqlite, MySQL, PostgreSQL и т. Д.). И в зависимости от конкретной технологии хранения, он может предложить различные функции и гарантии производительности.Управление динамическими зависимостями в OCaml
Каковы возможные способы управления внешними зависимостями для такой библиотеки? Скажем, если я буду развиваться с MySQL, я не хочу вводить ни времени компиляции, ни времени выполнения для sqlite.
В C++ я мог бы использовать абстрактные интерфейсы и поместить конкретную логику в модули, условно включенные в мой проект (в зависимости от переключателей конфигурации). Мне любопытно, как кто-то подходил к одной и той же задаче в OCaml.
Если вы знаете, что вы никогда не будете использовать два движки одновременно в одной и той же программы, то вы можете также определяют общий интерфейс, реализованный разными бэкендами, и связывают правый во время компиляции. Преимущество состоит в том, что вам не нужно функторизировать всю вашу базу кода по аргументу DB. –
первоклассные модули также могут помочь избежать функторизации всей программы – ygrek