Gibt es eine Möglichkeit, h (f x) (g x) in Haskell punktfrei zu machen?

8

Ich möchte etwas wie Js Fork-Feature, denke ich. Gibt es eine Möglichkeit, dies zu tun?

    
user3023182 22.11.2013, 20:01
quelle

2 Antworten

15

Dies ist, unter Verwendung eines sogenannten anwendungsorientierten Stils,

%Vor%

mit <$> und <*> von Control.Applicative .

Eine Alternative besteht darin, h mit

in den% applicative-Funktor (->) r zu heben %Vor%

Die Intuition dahinter ist, dass wenn

%Vor%

Damit nimmt die gehobene Version zwei Funktionen r -> something statt der tatsächlichen something s und gibt dann r ein, um die something s aus den Funktionen zu holen.

Die liftA* und die entsprechende Kombination von <$> und <*> sind äquivalent.

    
kqr 22.11.2013 20:08
quelle
12

Während @kqr die praktikablere Lösung basierend auf der Applicative -Instanz für ((->) a) hat, können wir auch in der "pipey" -Methode darüber sprechen

%Vor%

bietet eine sehr kompositorische Art von Pointfree-Programm. Wir erstellen dieses Programm mit Tools von Control.Arrow .

Zuerst erhalten wir den rechten Teil unseres Diagramms mit einer gemeinsamen fehlenden Funktion in Haskell namens diag oder dup

%Vor%

Dann wird die Mitte mit dem (***) -Kombinator aus Control.Arrow

erstellt %Vor%

dann ist die linke Seite genau das, was uncurry für uns tut

%Vor%

Dann können wir alle x -Punkte mit einem sehr kompositorischen Stil löschen.

%Vor%     
J. Abrahamson 22.11.2013 20:34
quelle

Tags und Links