Wenn ich versuche, ein parametrisiertes Modul zu schreiben, das =
auf einen nicht angegebenen Typ aufruft, der vom Parameter geliefert wird, löst SML/NJ einen Typfehler aus. Zum Beispiel, wenn ichGibt es eine Möglichkeit, die Parameter-Signatur eines Funktors zu beschränken, damit der Parameter einer Struktur nicht spezifizierte Gleichheitstypen liefern kann?
signature SIG =
sig
type t
end
eine Unterschrift habe und versuchen, ein Modul F
über ein Modul S
mit der Unterschrift SIG
functor F (S : SIG) =
struct
fun f (x:S.t) (y:S.t) = (x = y)
end
ich die folgenden Kompilierung-Fehler zu parametrieren auslösen:
Error: operator and operand don't agree [equality type required]
operator domain: ''Z * ''Z
operand: S.t * S.t
in expression:
x = y
Wie kann ich angeben, dass S.t
ein Gleichheitstyp sein soll?
Die einzige Abhilfe, die ich der Lage gewesen, so weit, um herauszufinden, ist auch die Gleichheit Funktion in der Struktur, über die Versorgung der Funktor parametriert dh:
signature SIG' =
sig
type t
val eq : (''a * ''a) -> bool
end
functor F' (S' : SIG') =
struct
fun f' x y = S'.eq (x, y)
end
structure A = F'(struct
type t = int
val eq = (op =)
end)
Es scheint, als gäbe es einen besseren Weg geben muss obwohl ich auch etwas Grundlegendes und Wichtiges darüber falsch verstehe, wie Funktoren arbeiten sollen.
O jeez! Ich weiß nicht, wie ich noch nie zuvor auf dieses Keyword gestoßen bin! Ich darf die Dokumentation nicht hervorragend lesen. Vielen Dank! –