Warum benötigt die Funktionszusammensetzung Klammern?

8

Nehmen wir an, ich möchte Text.pack mit Text.strip zusammenstellen.

:t (.) produziert: (b -> c) -> (a -> b) -> a -> c

:t (Text.pack) produziert: String -> Text

:t (Text.strip) produziert: Text -> Text

So ersetzt strip für (b -> c) Folgendes: %Code% b = Text

Das Ersetzen von c = Text für pack ergibt: %Code% (a -> b)

Lets verify: a = String erzeugt: b = Text

Ok, großartig, probieren Sie es aus:

:t strip . pack

Produziert:

%Vor%

strip . pack :: String -> Text funktioniert wie erwartet .... warum?

    
Abraham P 11.08.2016, 20:40
quelle

2 Antworten

11

Funktionsanwendung hat eine höhere Priorität als Komposition.

strip.pack " example " entspricht strip.(pack " example ") . Dies ist ein Grund, warum Leute $ verwenden, um die Anwendung zu "unterdrücken", bis alle Funktionen zusammengesetzt sind:

%Vor%     
chepner 11.08.2016, 20:43
quelle
1

Die Funktionsanwendung hat eine höhere Priorität als der Funktionszusammensetzungsoperator.

    
Shoe 11.08.2016 20:43
quelle