тут как бы понимаете, вы одновременно захотели и шашечки и ехать, сначала придумали специальный подход для дизайна доменной области, а потом захотели, чтобы имеющиеся библиотеки поддерживали автоматически именно заказанный вами подход
я исходно хотел предложить решение помощнее с GADT, но решил упростить,
в этом примере Iso тоже можно выкинуть и автоматизировать на шейплесе, например и будет всё работать ещё автоматичнее
т.е. вы сами тут решаете больше вам хочется руками делать, или больше включить автомагизм типов
мой код посередине где-то