[Haskell-beginners] Monads

Patrick Lynch kmandpjlynch at verizon.net
Fri Mar 4 23:20:27 CET 2011

Good afternoon,

It does make sense...thank you...

I've just completed the online Haskell publication:  "Learn You a Haskell 
for Great Good" -- see url:   http://learnyouahaskell.com/chapters
It will be available in book form this month from Amazon...I've purchased a 
copy of it...
It shows the relationship between Functors, Applicative Functors, Monoids 
and Monads...
It also contains many examples...
I found it to be at a programmer's level...
I think that I'm at a point where I know what I don't know..

I'll proceed onto the book:  "Haskell The Craft of Functional Programming" 
and see if I can understand Monads in it...
I'd love to take a crack at Category Theory [my mathematics is good] but 
this looks like a formidable task...
I'll proceed using the Monad classes and instances as is - and hope that at 
some point I'll be able to create my own Monads...

I'm an independent software consultant, been doing it for 30 years, and I'm 
trying to choose between Haskell, F# , C#-VB.Net or Ruby on Rails...

Good weekend

btw: can you create a class in Haskell -[I'm guessing the answer to this is 
no -- see below, it doesn't work]?

     class MyCalculator a where
     myadd::( Num a) => a -> a -> a
     myAdd x y = x + y

----- Original Message ----- 
From: "Brent Yorgey" <byorgey at seas.upenn.edu>
To: <beginners at haskell.org>
Cc: "Patrick Lynch" <kmandpjlynch at verizon.net>
Sent: Friday, March 04, 2011 3:07 PM
Subject: Re: [Haskell-beginners] Monads

> On Wed, Mar 02, 2011 at 04:38:07PM -0500, Patrick Lynch wrote:
>> ----- Original Message ----- From: "Brent Yorgey"
>> <byorgey at seas.upenn.edu>
>> To: <beginners at haskell.org>
>> Sent: Wednesday, March 02, 2011 10:37 AM
>> Subject: Re: [Haskell-beginners] Monads
>> >On Wed, Mar 02, 2011 at 10:04:38AM -0500, Patrick Lynch wrote:
>> >>Daniel,
>> >>Thank you...I understand now...
>> >>Good day
>> >>
>> >>    instance Functor Maybe where
>> >>      fmap f (Just x) = Just (f x)
>> >>      fmap f Nothing = Nothing
>> >
>> >So you are confused about this code?  Can you be more specific what
>> >you are confused about?  Try thinking carefully about all the types
>> >involved.  What is the type of f? (You already answered this: a -> b.)
>> >What is the type of (Just x)? The type of x?  What type is required on
>> >the right hand side of the = ?  And so on.
>> -Hi Brent
>> I know that Maybe type is: data Maybe a = Nothing | Just a
>> ...so, I assume that the type to the right of the '=' should be
>> Maybe a..
> Not quite.  Let's look again at the type of fmap here:
>  fmap :: (a -> b) -> Maybe a -> Maybe b
> So fmap will be taking *two* parameters, the first of type (a -> b),
> the second of type Maybe a.  Then it needs to return something of type
> Maybe b (so this is what will be on the right hand side of the =).
>>     instance Functor Maybe where
>>       fmap Nothing = Nothing
>>       fmap Just x = Just x
> You're missing the first argument to fmap (the one of type a -> b).
> Let's call it f.  Since the second argument is of type (Maybe a)
> you're right that we should handle all cases (Nothing and Just).
>  fmap f Nothing = Nothing
> so here we need to return something of type 'Maybe b'.  Well, we don't
> have any values of type b, so the only thing we can do is return
> Nothing.
>  fmap f (Just x) = ?
> The reason we need the parentheses around (Just x) is simply that
> otherwise the compiler thinks we are writing a definition of fmap that
> takes three arguments: f, Just, and x, but that doesn't make sense.
> Now, here f has type (a -> b), and (Just x) has type (Maybe a), hence
> x has type a.  If we apply f to x we get something of type b, so we
> can define
>  fmap f (Just x) = Just (f x)
> Does that make sense?
> -Brent 

More information about the Beginners mailing list