On Sun, Mar 25, 2012 at 5:06 AM, Michael Snoyman <mich...@snoyman.com> wrote: > On Sun, Mar 25, 2012 at 2:01 PM, TP <paratribulati...@free.fr> wrote: >> Hello, >> >> My primary problem may be reduced to adding elements of two lists: >> [1,2,3] + [4,5,6] = [5,7,9] >> >> My first idea was to declare a list of Int as an instance of Num, and define >> (+) >> in the correct way. >> However, it seems it is not possible to do that: >> >> ------------------- >> instance Num [Int] where >> l1 + l2 = .... >> ------------------- >> >> Why? >> It seems it is necessary to do: >> >> ------------------ >> newtype ListOfInt = ListOfInt { getList :: [Int] } >> deriving (Show, Eq) >> >> instance Num ListOfInt where >> l1 + l2 = ... >> ------------------- >> >> Am I correct? Is it the best way to do that? >> >> Now, what is the most usual way to implement l1+l2? >> I have just read about applicative functors, with which I can do: >> >> ------------------- >> import Control.Applicative >> let l1 = [1,2,3] >> let l2 = [4,5,6] >> print $ getZipList $ (+) <$> ZipList l1 <*> ZipList l2 >> [5,7,9] >> ------------------- >> >> Is it the correct way to do that? >> I have tried: >> >> ------------------- >> instance Num ListOfInt where >> l1 + l2 = ListOfInt $ getZipList $ (+) <$> ZipList (getList l1) <*> >> ZipList (getList l2) >> ------------------- >> >> Isn't it too much complicated? >> >> Thanks >> >> TP >> >> _______________________________________________ >> Haskell-Cafe mailing list >> Haskell-Cafe@haskell.org >> http://www.haskell.org/mailman/listinfo/haskell-cafe > > A simple solution is to use the zipWith[1] function: > > zipWith (+) [1,2,3] [4,5,6] == [5,7,9] > > It takes a bit of time to get acquainted with all of the incredibly > convenient functions in base, but once you know them, it can greatly > simplify your code. > > Michael
Not knowing zipWith, I usually write map (uncurry (+)) (zip [1,2,3] [4,5,6]) _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe