История изменений
Исправление AndreyKl, (текущая версия) :
ну в общем то что ты описываешь похоже есть в хаскеле: запрещаешь экспорт консруктора типов из модуля и експортируешь только функции умеющие из грязных типов создавать чистые. Сами грязные от чистых отличаешь с помощью фантомных типов. Сами типы можно ограничивать как угодоно, называй его например Int101_143 и экспортируй конструктор который создаёт такой тип.
Причём всё это существует только в компил тайме, никаких накладных расходов в рантайме.
Исходная версия AndreyKl, :
ну в общем то что ты описываешь похоже есть в хаскеле: запрещаешь экспорт консруктора типов из модуля и експортируешь только функции умеющие из грязных типов создавать чистые. Сами грязные от чистых отличаешь с помощью фантомных типов. Сами типы можно ограничивать как угодоно, называй его например Int101_143 и экспортируй конструктор который создаёт такой тип.
Причём всё это существует только в компил тайме, никаких накладных расходов в рантайме.