2010-11-19 5 views
1

Meine XP-Box verwendet Haskell-Plattform, Version 6.12.3mir helfen, zu verstehen Funktionen in meiner Haskell GHCI Konfigurationsdatei

ich folgend in meiner .ghci Datei enthalten.

:def test \_ -> return $ ":load c:\scripts\haskell\test.hs" 

Jetzt kann ich kompilieren und mein test.hs Skript laden :test durch Eingabe. Ich kann aber auch :t, :te or :tes verwenden. Ich vermute, dies ist das Haskell-Idiom namens Pattern-Matching. Leider verhindert mein: test-Befehl jetzt die Verwendung von :t als Kurzform des Haskell-Befehls :type.

Wie kann ich eine Funktion mit einem ganzen Wort aufrufen, das mit einem "t" beginnt, z. B. "test", das den :t Alias ​​von :type nicht stört?

+3

Das ist * nicht * Mustervergleich. – delnan

Antwort

4

Sie können einen Alias ​​für einen Befehl mit :def erstellen.

:def t return . (":type "++) 

Wie kann ich eine Funktion mit einem ganzen Wort aufzurufen, die mit einem „t“, wie „test“ beginnt, die mit dem :t alias von :type nicht stört?

Bisher haben wir über GHCi-Befehle gesprochen. Funktionsnamen beginnen nicht mit einem Doppelpunkt und es gibt keine automatische Vervollständigung von Teilfunktionsnamen.

3

In Ihrer Frage verwechseln Sie zwei verschiedene Dinge: GHCi-Befehle, die mit einem Doppelpunkt beginnen und Ihnen erlauben, mit GHCi zu interagieren, wie es läuft; und Haskell-Funktionen, die gewöhnliche Namen haben und die Sie innerhalb von GHCi ausführen können (die aber im Allgemeinen nicht abfragen können). Jedes Haskell-Tutorial hilft Ihnen bei normalen Funktionen. Für GHCi-Befehle ist die beste Referenz wahrscheinlich the GHC manual's section on GHCi; Es gibt sogar a subsection just about commands.

Ich denke, dass Heatsink's suggestion ist das beste für die Wiederherstellung der Verwendung von :t; GHCi versucht Ihnen zu helfen, indem Sie herausfinden, wofür der Befehl ein Präfix ist, und das stattdessen ausführt. Wenn Sie also falsch raten, müssen Sie ihm nur sagen, was Sie meinen. Beachten Sie, dass nichts mit Mustervergleich zu tun hat. Pattern-Matching hat mit dem Schreiben von Haskell-Funktionen zu tun, die Daten über Konstrukteuren inspizieren, wie

null :: [a] -> Bool 
null [] = True 
null (_:_) = False 
+0

Wie ich mich erinnere, ist ghci's Verhalten, den Befehl auszuwählen, der dem Präfix entspricht, zuerst alphabetisch. – sclv

+0

Das scheint sicherlich zu sein, was passiert; Ich meinte "falsch" im Sinne von "... aber ich will diese Wahl nicht!" –

0

Von „Lernen Sie eine Haskell“ ‚s Kapitel anfangen.

"Der interaktive Modus wird durch Eingabe von ghci an Ihrer Eingabeaufforderung aufgerufen. Wenn Sie einige Funktionen in einer Datei namens myfunctions.hs definiert haben, laden Sie diese Funktionen durch Eingabe von: l myfunctions und dann können Sie Spielen Sie mit ihnen, vorausgesetzt, myfunctions.hs befindet sich im selben Ordner, in dem ghci aufgerufen wurde. Wenn Sie das .hs-Skript ändern, führen Sie einfach: l myfunctions erneut oder do: r, was äquivalent ist, weil das aktuelle Skript neu geladen wird. "

Ich bin irgendwie verwirrt, warum Sie getan haben, was Sie in erster Linie getan haben? Können Sie erklären? Es ist nicht, dass mehr Aufwand viel

test.hs 

tun es auf diese Weise auch eine zusätzliche .hs zu geben hat man den Vorteil, daran zu erinnern, dass Sie eine Datei laden.