In alternativa, invece di usare zip
è possibile utilizzare map
:
map (\x -> (False, x)) a
questo sarebbe più appropriato esprimere il vostro intento (a mio parere), in quanto si vuole fare la stessa cosa ad ogni elemento della lista. Se vuoi fare cose diverse per ogni elemento, allora zip
o zipWith
potrebbe essere più appropriato.
Se si voleva evitare il lambda, è possibile scrivere pointfree usando &&&
da Control.Arrow
:
map (const False &&& id) a
che in pratica dice "si applicano le funzioni const False
e id
all'ingresso, poi costruire una tupla di entrambi le loro uscite ". C'è il TupleSections
estensione che permetterebbe di scrivere questo come
map (False,) a
(suggerimento fornito da @thoferon), ma io personalmente trovare questo meno chiaro, dal momento che si deve sapere che l'estensione è attivato e notare la ,
dopo False
. Si potrebbe scrivere come
map ((,) False) a
senza l'estensione dal (,)
agisce in funzione del tipo di a -> b -> (a, b)
, e mentre un po 'più dettagliato non richiede che permette un'estensione del linguaggio.
Perché usare 'zip' quando si ha' map'? – AJFarmar
'f = (<$>). (,) ' – Shanthakumar