type números inteiros em ocaml

Alguém poderia me dar sugestões / conselhos sobre como criar números inteiros no OCaml (3.12) para apoiar operações de adição e subtração nele

Por exemplo, se eu tiver números representados assim:

type zero
type 'a succ
type pos1 = zero succ
type pos2 =  zero succ succ
...

Preciso de uma maneira de definir funções em tipos como este:

val add: pos2 -> pos1 -> pos3

Little background: Estou tentando portar algum código haskell para operações em dimensões físicas e preciso da capacidade de definir operações em tipos de dimensão (registro de 7 ints de nível de tipo representando expoentes de 7 unidades básicas de SI). Preciso fazer isso desta maneira para evitar a ligação dinâmica (ao usar objetos) e permitir que o compilador avalie e verifique todas essas expressões estaticament

Meu entendimento atual é que eu deveria criar um GADT que implemente operações como construtores de tipo, mas ainda estou lutando com a ideia, e qualquer dica seria muito apreciad

questionAnswers(3)

yourAnswerToTheQuestion