He estado haciendo algo de programación OCaml últimamente para aprender el idioma y familiarizarme más con la programación funcional. Recientemente, he empezado a pensar que me gustaría ser capaz de extender un tipo existente (ya sea integrado en, o uno de mi propia), por ejemplo:Extender un tipo existente en OCaml
type bexp =
And of bexp * bexp
| Or of bexp * bexp
| Xor of bexp * bexp
| Not of bexp;;
Ahora digamos que quiero añadir una variante de Nop a este tipo, pero solo para usar en un nuevo tipo, tipo de herencia. Oye, se supone que son tipos de datos algebraicos, ¿verdad? Entonces, ¿por qué no algo así como:
type nbexp = bexp | Nop nbexp ;;
... pero esto no es válido OCaml, se da un error de sintaxis. Básicamente, lo que trato de hacer es decir que quiero que nbexp incluya todo lo que incluye bexp y también añadirle un Nop. Supongo que esto no es posible porque, si, por ejemplo, utilizaras el constructor Y no habría manera de determinar si era un tipo bexp o un tipo nbexp. (Creo que el constructor Nop tomando un nbexp también puede ser problemático.)
Entonces, ¿hay alguna manera de hacer algo como esto en OCaml? Y, ¿es este el tipo de cosa que se puede hacer en Haskell (con tipos de clases, tal vez)?
quizás te interesen: https://sites.google.com/site/ocamlopen/ –