Scrittura di programmi Haskell Mi sono trovato a dover un operatore come questo.:: a -> (a -> b) -> operatore b (Haskell)
(|>) :: a -> (a -> b) -> b
(|>) = flip ($)
infixl 0 |>
Penso che sia utile quando si incollano più funzioni insieme.
tText cs = someFun cs |>
lines |>
map (drop 4) |>
reverse
preferisco sopra .
perché con |>
l'ordine in cui vengono applicate le funzioni è lo stesso che l'ordine in cui sono scritte le funzioni.
tText' cs = reverse .
map (drop 4) .
lines .
someFun $ cs
La domanda è: è questo (|>
) qualcosa che già esiste nella/qualche altra libreria di base Prelude
? Reimplementare cose semplici è qualcosa di sciocco che vorrei evitare.
Una ricerca di Hoogle non ha aiutato. La cosa più vicina che ho trovato è stata >>>
(frecce), ma sembra eccessivo.
No, non lo è, anche se come dici tu ">>>" fa. [C'era un'altra domanda SO sul perché F # usa '|>' dove Haskell usa '.' e' $ ', che è piuttosto rilevante.] (Http://stackoverflow.com/questions/1457140/haskell-composition-vs- fs-pipe-forward-operator) (Nota anche, solo per divertimento, che con '.' o' >>> ', puoi scrivere la tua funzione point-free:' tText = reverse. map (drop 4). lines. someFun', o 'tText = someFun >>> lines >>> map (drop 4) >>> reverse'.) –
Qualche tempo fa, c'era una conversazione sulla mailing list sull'aggiunta di questo alle librerie standard. http://www.haskell.org/pipermail/libraries/2012-November/018832.html –
"l'ordine in cui le funzioni sono applicate è lo stesso dell'ordine in cui sono scritte le funzioni." Bene - questo è il tipo di pensiero che gli Haskellers evitano: non specifichi "fai questo, poi con il risultato fallo, poi ..." ma concentrati sul risultato desiderato, quindi è perfettamente naturale iniziare con l'ultimo passaggio di calcolo. Inoltre, con la valutazione pigra, questo "ultimo" passo sarà in realtà il primo a essere valutato! - Per il tipo procedurale di funzioni, quelle in cui è effettivamente necessario pensare in passaggi sequenziali, Haskell ha Monade, la cui notazione 'do' è sempre" avanti ". – leftaroundabout