
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"
On Wed, Mar 02, 2011 at 04:38:07PM -0500, Patrick Lynch wrote:
----- Original Message ----- From: "Brent Yorgey"
To: 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