Ich habe in letzter Zeit einige OCaml-Programmierung gemacht, um die Sprache zu lernen und mehr über die funktionale Programmierung zu lernen. Vor kurzem habe ich angefangen zu denken, dass ich möchte in der Lage sein eine bestehende Art zu erweitern (entweder eingebaut in-oder einem meiner eigenen), zum Beispiel: JetztErweitern eines vorhandenen Typs in OCaml
type bexp =
And of bexp * bexp
| Or of bexp * bexp
| Xor of bexp * bexp
| Not of bexp;;
sagen wir, ich möchte hinzufügen eine Nop-Variante zu diesem Typ, aber nur für den Einsatz in einem neuen Typ - eine Art der Vererbung. Hey, das sollen Algebraische Datentypen sein, oder? Also warum nicht etwas wie:
type nbexp = bexp | Nop nbexp ;;
... aber das ist nicht gültig OCaml, gibt es einen Syntaxfehler. Grundsätzlich versuche ich zu sagen, dass nbexp alles beinhalten soll, was bexp includes enthält, und auch einen Nop hinzufüge. Ich nehme an, das ist nicht möglich, denn wenn Sie zum Beispiel den And-Konstruktor verwendet hätten, gäbe es keine Möglichkeit festzustellen, ob es sich um einen Bexp-Typ oder einen Nbexp-Typ handelt. (Ich denke, der Konstruktor Nop, der ein nbexp nimmt, könnte auch problematisch sein.)
Gibt es also eine Möglichkeit, so etwas in OCaml zu tun? Und ist das in Haskell so machbar (vielleicht mit Typenklassen)?
tun Vielleicht von Interesse: https://sites.google.com/site/ocamlopen/ –