Send Beginners mailing list submissions to beginners@haskell.org To subscribe or unsubscribe via the World Wide Web, visit http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners or, via email, send a message with subject or body 'help' to beginners-requ...@haskell.org
You can reach the person managing the list at beginners-ow...@haskell.org When replying, please edit your Subject line so it is more specific than "Re: Contents of Beginners digest..." Today's Topics: 1. Is map (map f) just map f? (Galaxy Being) 2. Re: Is map (map f) just map f? (Akhra Gannon) 3. Re: Is map (map f) just map f? (Galaxy Being) 4. Re: Is map (map f) just map f? (Ut Primum) ---------------------------------------------------------------------- Message: 1 Date: Wed, 7 Apr 2021 11:47:03 -0500 From: Galaxy Being <borg...@gmail.com> To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <beginners@haskell.org> Subject: [Haskell-beginners] Is map (map f) just map f? Message-ID: <CAFAhFSUXRP_v6x=6c63fbMd+=dneng5peu-qv84-6vurxq6...@mail.gmail.com> Content-Type: text/plain; charset="utf-8" I'm in Bird's *Thinking Functionally with Haskell* and the topic is natural transformations. He says filter p . map f = map f . filter (p . f) and he has a proof, but one step of the proof he goes from filter p . map f = concat . map (map f) . map (test (p . f)) to filter p . map f = map f . concat . map (test (p . f)) which means concat . map (map f) => map f . concat which means map (map f) = map f ... or I'm getting this step wrong somehow. To begin with, I'm having a hard time comprehending map(map f), Any ideas on how this is possible? LB -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.haskell.org/pipermail/beginners/attachments/20210407/d5204531/attachment-0001.html> ------------------------------ Message: 2 Date: Wed, 7 Apr 2021 10:06:47 -0700 From: Akhra Gannon <tan...@gmail.com> To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <beginners@haskell.org> Subject: Re: [Haskell-beginners] Is map (map f) just map f? Message-ID: <cajopsucs1bpswr1abkwh0lq0sep91ohe9n-xtb0fczqchwr...@mail.gmail.com> Content-Type: text/plain; charset="utf-8" Check the types! map :: (a -> b) -> [a] -> [b] Therefore: map f :: [a] -> [b] map . map :: (a -> b) -> [[a]] -> [[b]] map (map f) :: [[a]] -> [[b]] And, concat :: [[a]] -> [a] Put it all together and you should see how that rewrite works! On Wed, Apr 7, 2021, 9:47 AM Galaxy Being <borg...@gmail.com> wrote: > I'm in Bird's *Thinking Functionally with Haskell* and the topic is > natural transformations. He says > > filter p . map f = map f . filter (p . f) > > and he has a proof, but one step of the proof he goes from > > filter p . map f = concat . map (map f) . map (test (p . f)) > > to > > filter p . map f = map f . concat . map (test (p . f)) > > which means > > concat . map (map f) => map f . concat > > which means > > map (map f) = map f > > ... or I'm getting this step wrong somehow. To begin with, I'm having a > hard time comprehending map(map f), Any ideas on how this is possible? > > LB > > > > > _______________________________________________ > Beginners mailing list > Beginners@haskell.org > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.haskell.org/pipermail/beginners/attachments/20210407/e4a483ee/attachment-0001.html> ------------------------------ Message: 3 Date: Thu, 8 Apr 2021 00:03:32 -0500 From: Galaxy Being <borg...@gmail.com> To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <beginners@haskell.org> Subject: Re: [Haskell-beginners] Is map (map f) just map f? Message-ID: <cafahfsw_h7jw-+zecm4vkzehsh_u8rp2cbkb7v4sppyezhs...@mail.gmail.com> Content-Type: text/plain; charset="utf-8" So basically I can see that the type definitions would seem to deliver the same thing. I test it > (concat . (map (map (*5)))) [[1],[2],[3]] [5,10,15] > (map (*5) . concat) [[1],[2],[3]] [5,10,15] and can also conclude they give the same answer. So is this an example of referential transparency, i.e., the ability to substitute code and be assured both forms/expressions deliver the same answer? On Wed, Apr 7, 2021 at 12:07 PM Akhra Gannon <tan...@gmail.com> wrote: > Check the types! > > map :: (a -> b) -> [a] -> [b] > > Therefore: > > map f :: [a] -> [b] > > map . map :: (a -> b) -> [[a]] -> [[b]] > > map (map f) :: [[a]] -> [[b]] > > And, > > concat :: [[a]] -> [a] > > Put it all together and you should see how that rewrite works! > > > On Wed, Apr 7, 2021, 9:47 AM Galaxy Being <borg...@gmail.com> wrote: > >> I'm in Bird's *Thinking Functionally with Haskell* and the topic is >> natural transformations. He says >> >> filter p . map f = map f . filter (p . f) >> >> and he has a proof, but one step of the proof he goes from >> >> filter p . map f = concat . map (map f) . map (test (p . f)) >> >> to >> >> filter p . map f = map f . concat . map (test (p . f)) >> >> which means >> >> concat . map (map f) => map f . concat >> >> which means >> >> map (map f) = map f >> >> ... or I'm getting this step wrong somehow. To begin with, I'm having a >> hard time comprehending map(map f), Any ideas on how this is possible? >> >> LB >> >> >> >> >> _______________________________________________ >> Beginners mailing list >> Beginners@haskell.org >> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners >> > _______________________________________________ > Beginners mailing list > Beginners@haskell.org > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.haskell.org/pipermail/beginners/attachments/20210408/e6c57fde/attachment-0001.html> ------------------------------ Message: 4 Date: Thu, 8 Apr 2021 07:55:29 +0200 From: Ut Primum <utpri...@gmail.com> To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <beginners@haskell.org> Subject: Re: [Haskell-beginners] Is map (map f) just map f? Message-ID: <canjdmkjrolzq5ady4ntca_-0orq-srcvenhni9rlt0hjt2v...@mail.gmail.com> Content-Type: text/plain; charset="utf-8" Yes, thanks to referential transparency you can substitute concat . map (map f) with map f . concat in an expression and be sure you'll always get the same result Il gio 8 apr 2021, 07:04 Galaxy Being <borg...@gmail.com> ha scritto: > So basically I can see that the type definitions would seem to deliver the > same thing. I test it > > > (concat . (map (map (*5)))) [[1],[2],[3]] > [5,10,15] > > (map (*5) . concat) [[1],[2],[3]] > [5,10,15] > > and can also conclude they give the same answer. So is this an example of > referential transparency, i.e., the ability to substitute code and be > assured both forms/expressions deliver the same answer? > > > On Wed, Apr 7, 2021 at 12:07 PM Akhra Gannon <tan...@gmail.com> wrote: > >> Check the types! >> >> map :: (a -> b) -> [a] -> [b] >> >> Therefore: >> >> map f :: [a] -> [b] >> >> map . map :: (a -> b) -> [[a]] -> [[b]] >> >> map (map f) :: [[a]] -> [[b]] >> >> And, >> >> concat :: [[a]] -> [a] >> >> Put it all together and you should see how that rewrite works! >> >> >> On Wed, Apr 7, 2021, 9:47 AM Galaxy Being <borg...@gmail.com> wrote: >> >>> I'm in Bird's *Thinking Functionally with Haskell* and the topic is >>> natural transformations. He says >>> >>> filter p . map f = map f . filter (p . f) >>> >>> and he has a proof, but one step of the proof he goes from >>> >>> filter p . map f = concat . map (map f) . map (test (p . f)) >>> >>> to >>> >>> filter p . map f = map f . concat . map (test (p . f)) >>> >>> which means >>> >>> concat . map (map f) => map f . concat >>> >>> which means >>> >>> map (map f) = map f >>> >>> ... or I'm getting this step wrong somehow. To begin with, I'm having a >>> hard time comprehending map(map f), Any ideas on how this is possible? >>> >>> LB >>> >>> >>> >>> >>> _______________________________________________ >>> Beginners mailing list >>> Beginners@haskell.org >>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners >>> >> _______________________________________________ >> Beginners mailing list >> Beginners@haskell.org >> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners >> > _______________________________________________ > Beginners mailing list > Beginners@haskell.org > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.haskell.org/pipermail/beginners/attachments/20210408/2be2759d/attachment.html> ------------------------------ Subject: Digest Footer _______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners ------------------------------ End of Beginners Digest, Vol 153, Issue 2 *****************************************