Ich spiele mit der interact
-Funktion von Prelude, wollen eine einfache REPL meine Eingaben Zeile für Zeile zu bewerten, und ich kann nicht verstehen, was vor sich geht.Ich frage mich über Interaktion Verwendung
Wenn ich mache es einfach so:
main :: IO()
main = interact interaction
interaction :: String -> String
interaction (x:xs) = xs
interaction x = x
Dann verhält es in Ordnung, und entfernt das erste Zeichen von meinem Eingang, oder gibt den Eingang, wenn es nur ein Zeichen lang ist.
Was mir ein Rätsel ist, wenn diese Zeile hinzufügen:
interaction :: String -> String
interaction x | length x > 10 = "long word" -- this line causes problem
interaction (x:xs) = xs
interaction x = x
Dann interagieren scheint nicht mehr richtig zu arbeiten. Es wartet nur auf meine Eingabe, schluckt es wartet auf einen anderen Eingang und so weiter, aber nie gibt nichts aus.
Es scheint so einfach, aber ich kann nicht sehen, was schief läuft. Irgendeine Idee?
(Auf meinem Weg habe ich GHC 7.6.3, ich weiß nicht, ob es eine gewisse Bedeutung hat.)
ok, so ist es wegen meiner Verwendung der "Länge" -Funktion. es macht Sinn. Vielen Dank. –