сабтайпинг для меня больше ассоциируется с underlying types типа как в Go где ты можешь сделать именованный int, и он будет относится именно к интам и ничему больше
тут можно идти двумя путями, либо при вызове кастовать типы c копированием либо компилировать функции под каждый новый тип с другими оффсетами, но это сломает весь ABI, будет килотонна таких функций
В OCaml похоже на tagged union тип, в функции матчить