stile applicativo Functor:
import Control.Applicative
addLists xs ys = getZipList $ (+) <$> ZipList xs <*> ZipList ys
Si noti che questo è così brutto, perché ci sono due modi per fare lista un applicativo Functor. Il primo (e IMHO meno utile) è prendere tutte le combinazioni, e in questo modo diventa lo "standard", quindi (+) <$> [1,2] <*> [30,40]
è [31,41,32,42]
. L'altro modo è di comprimere gli elenchi come necessario, ma poiché si può avere una sola istanza di classe di tipo per tipo, dobbiamo avvolgere gli elenchi in elenchi di zip e scartare il risultato utilizzando getZipList.
BTW: 'add = uncurry (+)'. Si noti inoltre che la risposta 'zipWith' è il primo hit su [Hoogle] (http://haskell.org/hoogle/) per la query [' (a -> b -> c) -> \ [a \] - > \ [b \] -> \ [c \] '] (http://haskell.org/hoogle/?hoogle=%28a+-%3E+b+-%3E+c%29+-%3E+%5Ba% 5D + -% 3E +%% 5d 5BB + -% 3E +% 5Bc% 5D). – ephemient
Grazie a Dio, proverò su Google la prossima volta. –
@ TomMD, non capisco la prima parte del tuo commento. –