Als Hackage und/oder Hoogle wird Ihnen sagen,
(>>>) :: Category k => a`k`b -> b`k`c -> a`k`c
(<<<) :: Category k => b`k`c -> a`k`b -> a`k`c
Beachten Sie, dass diese ist eigentlich die gleiche wie
(.) :: Category k => b`k`c -> a`k`b -> a`k`c
oder in seiner Prelude
Form, spezialisiert auf die Hask Kategorie von Funktionen,
(.) :: (b->c) -> (a->b) -> (a->c)
Also, <<<
und >>>
einfach komponieren Funktionen oder allgemeiner Morphismen/Pfeile.
<<<
komponiert in der gleichen Richtung wie die bekannten .
, während die Argumente >>>
Flips so dass “ Daten von links nach rechts fließen ”.
Nun, was Pfeil Zusammensetzung bedeutet, für andere Kategorien Hask, hängt natürlich von der Kategorie ab. Kleisli IO
ein leicht Beispiel zu verstehen: sagen wir
pipe :: Double -> String
pipe = show . sqrt . (+2) . abs
Wie gesagt, dies kann auch
pipe = abs >>> (+2) >>> sqrt >>> show
Jetzt haben, eine reine Funktion geschrieben werden, wenn Sie primitive IO-Protokollierung (wie Sie hinzufügen möchten könnte in einer imperativen Sprache) können Sie
type (-|>) = Kleisli IO
abs', add2', sqrt' :: Num a => a -|> a
show' :: Show a => a -|> String
abs' = Kleisli $ \x -> do putStrLn ("Absolute of "++show x++"...")
return $ abs x
add2' = Kleisli $ \x -> do putStrLn ("Add 2 to "++show x++"...")
return $ x + 2
sqrt' = Kleisli $ \x -> do putStrLn ("Square root of "++show x++"...")
return $ sqrt x
show' = Kleisli $ \x -> do putStrLn ("Show "++show x++"...")
return $ show x
Damit vorstellen möchten, können Sie
0 definieren
in genau die gleiche Art und Weise wie zuvor, das heißt
pipe' = abs' >>> add2' >>> sqrt' >>> show'
Aber Sie werden jetzt die Zwischenergebnisse ausgedruckt als Nebenwirkung erhalten.
Dieser Blog hat einen [link] (https://wiki.haskell.org/Arrow_tutorial#Kleisli_Arrows) zu einem Artikel über Kleisli Pfeile, der nützlich scheint. Ich glaube, dass diese beiden Operatoren eine Art von Funktionszusammensetzung darstellen (für Pfeile, die Funktionen sind). Für andere Arten von Pfeilen bin ich mir nicht sicher, da Pfeile mir etwas fremd sind. – jpaugh