Für die Praxis implementiere ich einen Queue-Datentyp in einem Modul namens "Queue". Mein Datentyp wird auch "Queue" genannt, ebenso wie sein einziger Wertkonstruktor:
%Vor% Soweit ich das verstehe, weil ich Queue
, nicht Queue(..)
oder Queue(Queue)
in der export-Anweisung geschrieben habe, erwarte ich nicht, dass der Wertkonstruktor meines Datentyps vom Modul exportiert wird. Dies ist genau das, was ich für Kapselungszwecke möchte: Benutzer sollten nicht in der Lage sein, den Wertkonstruktor direkt zu verwenden; nur emptyQueue
, enq
und die anderen Funktionen in meiner Schnittstelle.
Allerdings (und die Lösung für mein Problem kann für erfahrene Haskeller offensichtlich sein), wenn ich mein Modul in GHCi lade, kann ich den Wertkonstruktor direkt verwenden.
%Vor%Wie oben erwähnt, ist dies unerwünscht. Was mache ich falsch?
Sie machen nichts falsch. Es ist nur so, dass ghci aus Gründen der Übersichtlichkeit die Regeln für das Laden von Modulen ignoriert.
Wenn Sie sehen möchten, was normalerweise verfügbar wäre, können Sie
%Vor%Sie können später mit
zum Modus "Alles ist verfügbar" zurückkehren %Vor%Siehe auch Was ist wirklich an der Eingabeaufforderung? in der offiziellen Dokumentation.
Tags und Links haskell module encapsulation ghci value-constructor