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: Understanding the function monad ((->) r) (Olumide) ---------------------------------------------------------------------- Message: 1 Date: Sat, 25 Feb 2017 20:19:15 +0000 From: Olumide <50...@web.de> To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <beginners@haskell.org> Subject: Re: [Haskell-beginners] Understanding the function monad ((->) r) Message-ID: <298e16cd-1436-b976-bba0-1fae42ad7...@web.de> Content-Type: text/plain; charset=utf-8; format=flowed Thanks a bunch. Simply gorgeous answer. - Olumide On 21/02/17 14:32, Rahul Muttineni wrote: > Hi Olumide, > > Let the types help you out. > > The Monad typeclass (omitting the superclass constraints): > > class Monad m where > return :: a -> m a > (>>=) :: m a -> (a -> m b) -> m b > > Write out the specialised type signatures for (->) r: > > {-# LANGUAGE InstanceSigs #-} > -- This extension allows you to specify the type signatures in instance > declarations > > instance Monad ((->) r) where > return :: a -> (r -> a) > (>>=) :: (r -> a) -> (a -> (r -> b)) -> (r -> b) > > Now we look at how to make some definition of return that type checks. > We're given an a and we want to return a function that takes an r and > returns an a. Well the only way you can really do this is ignoring the r > and returning the value you were given in all cases! Because 'a' can be > *anything*, you really don't have much else you can do! Hence: > > return :: a -> (r -> a) > return a = \_ -> a > > Now let's take a look at (>>=). Since this is a bit complicated, let's > work backwards from the result type. We want a function that gives us a > b given an r and given two functions with types (r -> a) and (a -> (r -> > b)). To get a b, we need to use the second function. To use the second > function, we must have an a, which we can get from the first function! > > (>>=) :: (r -> a) -> (a -> (r -> b)) -> (r -> b) > (>>=) f g = \r -> (g (f r)) r > > Hope that helps! > Rahul > > > On Tue, Feb 21, 2017 at 5:04 PM, Olumide <50...@web.de > <mailto:50...@web.de>> wrote: > > On 21/02/2017 10:25, Benjamin Edwards wrote: > > What is it that you are having difficulty with? Is it "why" this > is a > good definition? Is it that you don't understand how it works? > > > I simply can't grok f (h w) w. > > - Olumide > > On Tue, 21 Feb 2017 at 10:15 Olumide <50...@web.de > <mailto:50...@web.de> > <mailto:50...@web.de <mailto:50...@web.de>>> wrote: > > Hello List, > > I am having enormous difficulty understanding the definition > of the bind > operator of ((->) r) as show below and would appreciate help > i this > regard. > > instance Monad ((->) r) where > return x = \_ -> x > h >>= f = \w -> f (h w) w > > Thanks, > > - Olumide > > _______________________________________________ > Beginners mailing list > Beginners@haskell.org <mailto:Beginners@haskell.org> > <mailto: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 <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 <mailto:Beginners@haskell.org> > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > <http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners> > > > > > -- > Rahul Muttineni > > > _______________________________________________ > 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 104, Issue 18 ******************************************