/ / Haskell: Gibt es einen Operator wie diesen: (<$$>) :: Functor f => f a -> (a -> b) -> f b - haskell

Haskell: Gibt es einen Operator wie folgt: (<$$>) :: Functor f => f a -> (a -> b) -> f b - haskell

Auf diese Weise kann man herausfinden, dass Map und Flat Map in Haskell

xs >>= f          ≃ flatMap f xs
xs >>= return . f ≃ map f xs

Ich dachte, es wäre praktisch, wenn wir einen solchen Operator hätten

(<$$>) :: Functor f => f a -> (a -> b) -> f b
f <$$> fn = fn <$> f

damit die Karte ordentlicher ausgedrückt werden kann:

xs >>=  f ≃ flatMap f xs
xs <$$> f ≃ map f xs

Existiert ein solcher Operator in der Standardbibliothek von Haskell?

Antworten:

4 für die Antwort № 1

Es ist nicht irgendwo in der base Paket. Die am häufigsten verwendete Bibliothek, die diese Funktion exportiert, ist lens, wie <&>.


2 für die Antwort № 2

Beachten Sie auch, dass, wie oft Argumente umgelegt werden, Operatorabschnitte "genug" sein können und vielleicht die Lesbarkeit erhalten, indem sie die Einführung neuer Operatoren einschränken:

> :{
| (<$> Just 0) $ x ->
|   x + 1 + 1 + 1
|     + 1 + 1 + 1
|     + 1 + 1 + 1
|     + 1 + 1 + 1
| :}
Just 12