Sto osservando i funtori, i funtori applicativi ... Non so come arrivare dove voglio, ma ho la sensazione che seguire i tipi dovrebbe avvicinarmi.Posso mappare il primo elemento di una coppia senza frecce?
C'è un modo semplice per rendere un valore map
valido solo per il primo elemento di una tupla da 2? Prendendo first
da Control.Arrow
e l'utilizzo di Arrow (->)
, questo fa il trucco bene:
map . first :: (b -> c) -> [(b, d)] -> [(c, d)]
La mia unica preoccupazione è che devo ancora acquisire una vera e propria intuizione per le frecce, e così io probabilmente mi trovo in acque profonde, prima o più tardi se continuo così. Inoltre, questo sembra essere un caso piuttosto conveniente che non può essere generalizzato.
È possibile ottenere la stessa funzionalità utilizzando qualcosa dai funtori, dalle monadi o da qualsiasi altra cosa, mentre si arriva al cuore di ciò che voglio? Stavo scherzando con
\f -> map (f `on` fst)
-come idee, ma non riuscivo a arrivarci.
Se si utilizza un'astrazione non si capisce ti mette a disagio, non c'è assolutamente nulla di sbagliato nell'usare la '' mappa 'meno astratta (\ (a, b) -> (fa, b)) '. –
Grazie per tutti i suggerimenti!Questo è stato davvero illuminante. Ho accettato la risposta più votata da te. – Ashe
Controlla http://stackoverflow.com/questions/413930 se ti senti a disagio con 'map. FIRST'. – sdcvvc