2016-08-21 2 views
-1

Herauszufinden, dass Karte und flache Karte in Haskell könnte der auf diese Weise durchgeführt werden,

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

ich dachte, es wäre bequemer, wenn wir einen solchen Betreiber haben

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

so dass Karte mehr tidily ausgedrückt werden könnte:

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

Existiert ein solcher Operator in der Standardbibliothek von Haskell?

+0

Lauf [diese Abfrage] (https: // www.haskell.org/hoogle/?hoogle=%3A%3A+Functor+f+%3D%3E+f+a+-%3E+%28a+-%3E+b%29+-%3E+f+b+%2Bbase) in Hoogle gibt keine exakte Übereinstimmung zurück. Das glaube ich leider nicht. – baxbaxwalanuksiwe

+0

ja, ich habe genau die gleiche Abfrage, aber nichts gefunden: so diese Frage kam –

+1

Wenn Hoogle, nichts finden [versuchen Hayoo] (http://hayoo.fh-wedel.de/?query=Functor+f+% + 3D% 3E + f + a -% 3E% + 28a + -% 3E + b +% 29 -% 3E + f + b) (die mehr Pakete standardmäßig durchsucht). Es gibt nichts in der Standardbibliothek, aber es gibt viele '<&>'s in verschiedenen Bibliotheken. – Bergi

Antwort

4

Es ist nicht überall in dem base Paket. Die am häufigsten verwendeten Bibliothek, die diese Funktion exportiert ist lens, as <&>.

+1

[Mikrolinse] (http://hackage.haskell.org/package/microlens) hat auch diese Funktion. – danidiaz

2

Beachten Sie auch, dass, wie oft Argumente zu kippen, Operator Abschnitte können „genug“ sein und vielleicht Lesbarkeit durch eine Begrenzung der Einführung neuer Betreiber erhalten kann:

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

Dies verwendet nicht 'TupleSections' (oder Tupel für diese Angelegenheit). Es ist nur ein Operatorabschnitt, der keine Erweiterung erfordert. –

+0

Oh wirklich, nett! Danke :) – julm

Verwandte Themen