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. Re: Functions as Applicatives (Lee Duhem) ---------------------------------------------------------------------- Message: 1 Date: Wed, 24 Aug 2016 10:38:52 +0800 From: Lee Duhem <lee.du...@gmail.com> To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <beginners@haskell.org> Subject: Re: [Haskell-beginners] Functions as Applicatives Message-ID: <caoser0cyd0uz2kjurvbt_opkyjarccuqh3djcjjy-e0ndkx...@mail.gmail.com> Content-Type: text/plain; charset=UTF-8 On Tue, Aug 23, 2016 at 10:30 PM, Olumide <50...@web.de> wrote: > On 23/08/2016 12:39, Tony Morris wrote: >> >> All functions in Haskell always take one argument. > > > I know that. All functions accept one argument and return a value _or_ > another function. Is f the latter type? In the ((->) r) case, yes. lee > > - Olumide > > >> >> >> On 23/08/16 21:28, Olumide wrote: >>> >>> I must be missing something. I thought f accepts just one argument. >>> >>> - Olumide >>> >>> On 23/08/2016 00:54, Theodore Lief Gannon wrote: >>>> >>>> Yes, (g x) is the second argument to f. Consider the type signature: >>>> >>>> (<*>) :: Applicative f => f (a -> b) -> f a -> f b >>>> >>>> In this case, the type of f is ((->) r). Specialized to that type: >>>> >>>> (<*>) :: (r -> a -> b) -> (r -> a) -> (r -> b) >>>> f <*> g = \x -> f x (g x) >>>> >>>> Breaking down the pieces... >>>> f :: r -> a -> b >>>> g :: r -> a >>>> x :: r >>>> (g x) :: a >>>> (f x (g x)) :: b >>>> >>>> The example is made a bit confusing by tossing in an fmap. As far as the >>>> definition above is concerned, 'f' in the example is ((+) <$> (+3)) and >>>> that has to be resolved before looking at <*>. >>>> >>>> >>>> On Mon, Aug 22, 2016 at 9:07 AM, Olumide <50...@web.de >>>> <mailto:50...@web.de>> wrote: >>>> >>>> Hi List, >>>> >>>> I'm struggling to relate the definition of a function as a function >>>> >>>> instance Applicative ((->) r) where >>>> pure x = (\_ -> x) >>>> f <*> g = \x -> f x (g x) >>>> >>>> with the following expression >>>> >>>> ghci> :t (+) <$> (+3) <*> (*100) >>>> (+) <$> (+3) <*> (*100) :: (Num a) => a -> a >>>> ghci> (+) <$> (+3) <*> (*100) $ 5 >>>> 508 >>>> >>>> From chapter 11 of LYH http://goo.gl/7kl2TM . >>>> >>>> I understand the explanation in the book: "we're making a function >>>> that will use + on the results of (+3) and (*100) and return that. >>>> To demonstrate on a real example, when we did (+) <$> (+3) <*> >>>> (*100) $ 5, the 5 first got applied to (+3) and (*100), resulting in >>>> 8 and 500. Then, + gets called with 8 and 500, resulting in 508." >>>> >>>> The problem is that I can't relate that explanation with the >>>> definition of a function as an applicative; especially f <*> g = \x >>>> -> f x (g x) . Is (g x) the second argument to f? >>>> >>>> Regards, >>>> >>>> - Olumide >>>> _______________________________________________ >>>> Beginners mailing list >>>> Beginners@haskell.org <mailto:Beginners@haskell.org> >>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners >>>> <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 >> >> >> >> >> >> _______________________________________________ >> 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 ------------------------------ Subject: Digest Footer _______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners ------------------------------ End of Beginners Digest, Vol 98, Issue 18 *****************************************