Es ist bekannt, dass OCaml einen parametrischen Polymorphismus hat und dies zu einigen Einschränkungen führt. Haskell bietet durch seine Typklassen einen ad hoc Polymorphismus, der offensichtlich in verschiedenen Situationen sehr praktisch ist. Es ist auch bekannt, dass das System von Modulen und Funktoren von OCaml es ermöglicht, eine Art ad hoc Polymorphismus zu erstellen. Sehen Sie die große aktuelle Antwort von Simon Shine here zum Beispiel.OCaml-Funktoren, Haskell-Typklassen und Mehrfachableitungen
Mein Punkt ist, dass es in Haskell möglich ist, Typen zu erstellen, die mehrere Typen Klassen ableiten. Zum Beispiel:
data Person = Person { firstName :: String
, lastName :: String
, age :: Int
} deriving (Eq, Show, Read)
Dies ist sehr praktisch Typen mit mehreren Funktionen (so dass Werte des Typs Person
auf Gleichheit Tests zu unterstützen, sein bedruckbar, und in dem gegebenen Beispiel lesbar sein) zu definieren.
Meine Frage ist die folgende: Können wir das gleiche tun, einfach, in OCaml? Durch einfach ich meine mit der Grundsyntax der Sprache und ohne viele Kunstgriffe.
ein etwas konkretes Beispiel zu geben, nehmen wir haben zwei OCaml Unterschriften
module type Showable = sig
type t
val to_string : t -> string
end
module type Readable = sig
type t
val from_string : string -> t
end
Ziel ist ein Funktor F
von einem Modul parametrisiert zu schreiben, die sowohl Showable
und Readable
implementiert.
Das muss eine der besten geschriebenen Fragen sein, die ich je gesehen habe! Hoffe, jemand wird eine Antwort finden! – Lhooq