Hugs ist ein Interpreter mit dem typischen "`read-evaluate-write"'-Zyklus;
Hugs wertet aus:
abgestützt auf Funktionssammlung im Standard-Prelude und/oder vom Benutzer geladenen Dateien mit Haskell Definitionen.
Ausdrücke werden durch "`Return"' abgeschlossen!
:? - listet Kommandos auf
:quit - beendet die Sitzung
Einige Beispiele:
1 pohlmann@okapi:hugs
___ ___ ___ ___ __________ __________
/ / / / / / / / / _______/ / _______/ Hugs 1.4
/ /___/ / / / / / / / _____ / /______
/ ____ / / / / / / / /_ / /______ / The Nottingham and Yale
/ / / / / /___/ / / /___/ / _______/ / Haskell User's System
/__/ /__/ /_________/ /_________/ /_________/ Version 970410
Copyright (c) The University of Nottingham and Yale University, 1994-1997.
Bug reports: hugs-bugs@haskell.org. Web: http://www.haskell.org/hugs.
Reading file "/usr/local/lib/hugs/lib/Prelude.hs":
Hugs session for:
/usr/local/lib/hugs/lib/Prelude.hs
Type :? for help
Prelude> 37-(2+5)
30
Prelude> 27-2+5
30
Prelude> min 3 4
3
Prelude> 3==4
False
Prelude> sum [1..10]
55
Prelude> reverse "Salzburg"
"grubzlaS"
Prelude>
Natürlich gibt's auch Fehlermeldungen -- für syntaktisch falsche Ausdrücke, undefinierte Bezeichner oder unanständige Wünsche, ...
ERROR: Syntax error in expression (unexpected end of input)
Program error: primDivInt 37 0
Richtige Programmierer wollen natürlich ihre eigenen Funktionen, Konstanten, Datentypen, ...definieren. Solche "`Script"' genannte Sammlungen von Definitionen werden in eine Datei geschrieben und vor Gebrauch geladen:
:load bla.bla
es ist sinnvoll, das Suffix ``.hs'' zu verwenden (es gibt Werkzeuge, die
das brauchen);
außer solchen unstrukturierten Sammlungen gibt es auch einen
Modulbegriff mit entsprechenden Bezügen (Export / Import), mehr
dazu später!
Datei bla.bla:
area r=pi*r*r
where pi=3.1416
Datei error.bla:
area r=pi*r*r
were pi=3.1416
Damit folgende Hugs-Sitzung:
Prelude> :load bla.bla
Reading file "bla.bla":
Hugs session for:
/usr/local/lib/hugs/lib/Prelude.hs
bla.bla
Main> area 10
314.16
Main> :load error.bla
Reading file "error.bla":
Parsing
ERROR "error.bla" (line 2): Syntax error in input (unexpected `=')
Fehlermeldungen sind manchmal etwas schwierig zu interpretieren, woran oft die ungewohnte Typ-Philosophie von Haskell schuld ist (siehe später).
Im ersten Beispiel gilt:
hier: Typ von x unklar, deshalb kann nicht die geeignete Funktion ``show'' zur Ausgabe des Ergebnisses bestimmt werden,
beachte:
grundsätzlich ist ein Skript eine Menge von Definitionen, die sich aufeinander beziehen können, aber z.B. auch:
pi = 3.14 - besser umbenennen: name clash mit Prelude!
area r = pi * r * r
circumference r = 2 * pi * r