Warum kann nicht definiere ich eine neue Art in GHCI?
Frage
ich einen Fehler in GHCI erhalten, wenn ich versuche, eine neue Art zu definieren:
Prelude> data Point = Pt Int Int <interactive>:1:0: parse error on input `data' Prelude> let data Point = Pt Int Int <interactive>:1:4: parse error on input `data'
Was mache ich falsch?
Lösung
titaniumdecoy
, ich erinnere mich, dass mit dieser Art von GHCi Geheimnis geholfen, wenn ich die häufig gemacht Punkt gelernt, dass Dinge wie ‚läßt Quadrat x = x * x‘ innerhalb der GHCi Schreiben wie ist let a = f b
mit do
Notation in der IO
Monade zu schreiben - - sagen wir in dieser Art Beispiel:
palindromize :: IO ()
palindromize = do
a <- readFile "foo.txt"
let b = reverse a
putStrLn (a ++ b)
In ähnlicher Weise, wenn Sie einen Ausdruck in der GHCi neu zu definieren, es ist eine Art des folgend in do
Notation wie zu tun, was durchaus legitim ist:
makeMess :: IO ()
makeMess = do
a <- readFile "foo.txt"
let b = reverse a
putStrLn (a ++ b)
let b = a
putStrLn (a ++ b)
Niemand würde einen Datentyp deklarieren in der Mitte eine solche Sequenz, aber wäre es an anderer Stelle im Modul tun. Ich hätte gedacht, dass es irgendeine Art von theoretischer Einwand war, aber Don S. Bemerkung deutet darauf hin, es gibt nicht ein.
Andere Tipps
Es ist
Nur für historische Referenz, die HBI Haskell interaktive Umgebung erlaubt Voll Haskell in der Befehlszeile, einschließlich Typen, Klassen und so weiter. Es gibt keine a priori GHCi kann in ähnlicher Weise nicht funktionieren, und die Benutzer können eine Front-End zu GHC-API schreiben, die diese ... unterstützt
GHCI nicht zulässt, dass Sie Arten von interaktiven Eingabe definieren -. Stattdessen müssen Sie Ihre Typdefinition in einer Datei setzen und die Datei in GHCI :load