¿Alguien podría darme sugerencias/consejos para hacer enteros de nivel de tipo en OCaml (3.12) soportando operaciones de suma y resta en ellos?enteros de nivel de tipo en ocaml
Por ejemplo, si tengo números representados así:
type zero
type 'a succ
type pos1 = zero succ
type pos2 = zero succ succ
...
necesito una manera de definir la función de los tipos de la siguiente manera:
val add: pos2 -> pos1 -> pos3
poco de historia: Estoy intentando conecte un código haskell para operaciones en dimensiones físicas y necesito la capacidad de definir operaciones en tipos de dimensión (registro de 7 entradas de nivel de tipo que representan exponentes de 7 unidades SI básicas). Necesito hacerlo de esta manera para evitar el enlace dinámico (cuando se usan objetos) y para permitir que el compilador evalúe y compruebe estáticamente todas esas expresiones.
Mi comprensión actual es que debería hacer una GADT que implemente operaciones como constructores de tipos, pero todavía estoy luchando con la idea, y cualquier sugerencia sería muy apreciada.
Acabo de mirar estas diapositivas; la idea es muy simple y genial. Sin embargo, me parece que solo maneja la adición de nivel de tipo. No veo una manera de hacerlo funcionar para restar manteniendo la simplicidad. Si estás rastreando unidades SI, imagino que necesitas sustracción (y enteros negativos). –
@Jeffrey Me disculpo por las ideas que me llegan tan despacio, pero sabes que hay una rama "GADT" en OCaml, ¿verdad? https://sites.google.com/site/ocamlgadt/ (aparentemente, de acuerdo con esa página, los estamos obteniendo con 3.13). –
Sí, he escuchado rumores de que GADT "nativo" vendrá a OCaml en 3.13, van a ser tiempos bastante interesantes. Creo que tal vez el OP (etaion) quiere que algo funcione con la versión actual, pero tal vez la rama GADT sea aceptable. El análisis dimensional parece ser un buen caso de prueba para GADT. (Personalmente, me encantaría ver un ejemplo de código GADT que no sea un intérprete para un idioma pequeño.) Saludos, –