Hi Olumide,Let the types help you out.The Monad typeclass (omitting the superclass constraints):class Monad m wherereturn :: a -> m a(>>=) :: m a -> (a -> m b) -> m bWrite out the specialised type signatures for (->) r:{-# LANGUAGE InstanceSigs #-}-- This extension allows you to specify the type signatures in instance declarationsinstance Monad ((->) r) wherereturn :: 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 = \_ -> aNow 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)) rHope that helps!Rahul--On Tue, Feb 21, 2017 at 5:04 PM, Olumide <50295@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 <50295@web.de
<mailto:50295@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@haskell.org <mailto:Beginners@haskell.org>
Beginners mailing list
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
Rahul Muttineni
_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners