De/Flussrichtung
From HaskellWiki
(Category:De/Syntax) |
|||
| Line 81: | Line 81: | ||
[[Direction of data flow]] | [[Direction of data flow]] | ||
| - | [[Category:Syntax]] | + | [[Category:De/Syntax]] |
Current revision
Es wurde hin und wieder bemängelt, dass die symbolisierten Datenflussrichtungen verschiedener syntaktischer Konstrukte in Haskell voneinander abweichen. Es gibt in Haskell beide Richtungen in etwa gleich häufig:
links nach rechts:
| Funktionsdefinition | f x = x*x | (links Eingabe, rechts Ausgabe) |
| Lambda | \ x -> x*x | |
| do-notation | do f; g | |
| monadische Verkettung | f >>= g |
rechts nach links:
| Funktionsanwendung | f x f $ x | (rechts Eingabe, links darauf angewendete Transformation) |
| Verkettung | g . f | |
| Ergebnisse von Monaden | do x <- f | |
| monadische Verkettung | g =<< f |
Lambda-Ausdrücke sähen viel natürlicher aus, wenn die Verkettung von links nach rechts gehen würde, also statt
besser
Auch
wäre schon viel näher an der darunterliegenden Implementierung
Allerdings sehe ich noch zwei Unschönheiten/Gewöhnungsbedürftigkeiten:
Eines tritt beim Lesen von links-nach-rechts-Ausdrücken auf: Man sieht bei der Verwendung von Funktionen höherer Ordnung nicht sofort, wo die Argumente eines Funktionsaufrufes aufhören. Mein Lieblingsbeispiel - der
DifferentialoperatorMan muss also einen Ausdruck erst bis zum nächsten Absatz (schließende Klammer, Infixoperator) lesen, bis man weiß, um welchen Funktionsaufruf es sich eigentlich handelt.
Die zweite Sache ist die Verbindung von Typsignatur und Funktionsanwendung. Wir schreiben
derive :: (a -> a) -> (a -> a) derive f :: a -> a derive f x :: a
Wir können gewissermaßen die Argumente von der Typseite auf die Werteseite umschichten. Die Argumentreihenfolge ist daher in Typsignatur und Funktionsanwendung gleich. Bei der konsequenten links-nach-rechts-Notation ist das nicht mehr der Fall:
derive :: (a -> a) -> (a -> a) f derive :: a -> a x f derive :: a
Die Notation hat natürlich den unbestreitbaren Vorteil, dass man sich
der Gleichung die Ausdruecke immer von links manipuliert.
1 Weblinks
- http://www.haskell.org/pipermail/libraries/2005-August/004315.html
- http://www.iba-cg.de/doc/hal1-haskell-with-style.pdf
