
----- Original Message -----
From: "Brent Yorgey"
On Wed, Mar 02, 2011 at 10:04:38AM -0500, Patrick Lynch wrote:
Daniel, Thank you...I understand now... Good day
Ps I think my problem that I'm facing is that I don't see how the instance Functor Maybe is derived from the class Functor...
for example, the author Miran Lipovaca gives the following: class Functor f where fmap::(a->b)->f a->f b
if Maybe replaces f: fmap::(a->b)->Maybe a->Maybe b
Right.
I don't see how the instance Functor Maybe is derived [presumably: 'f' is function (a->b) and not functor 'f' as shown in the class description):
Yes, here 'f' is a function (a -> b). It is confusing that often the letter f is used both to represent an arbitrary Functor or to represent an arbitrary function. But you can tell the difference by seeing whether the f occurs in a type or in some code.
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.. ...presumably, it should handle both Nothing and Just a ...so I can see: instance Functor Maybe where fmap Nothing = Nothing fmap Just x = Just x ...presumably, x can be any type, eg Int, String, Char... ...so I don't see where 'f' comes from and I don't understand why (Just x) is in parenthesis... Thanks for your help, I'm beginning to see what I don't know... Good evening, -Pat
-Brent
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners