[Haskell-beginners] About monad

Trung Quang Nguyen trungnq97 at gmail.com
Thu Dec 20 16:39:03 CET 2012


*fmap*<http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v:fmap>
::
Functor f => (a -> b) -> f a -> f
b<http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v:fmap>
fmap f (Just a)      = Just (f a)

We wrap Just around (f a) because f return a value with type b instead
(Just b).

But in
(*>>=*)<http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v:-62--62--61->
::
Monad m => m a -> (a -> m b) -> m
b<http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v:-62--62--61->
Just x >>= f  = f x

We don't need to wrap Just around (f a) because f return (Just b).

--Trung



2012/12/20 Miguel Negrao <miguel.negrao-lists at friendlyvirus.org>

>
> A 20/12/2012, às 14:07, Trung Quang Nguyen escreveu:
>
> > Hi all,
> >
> > I saw this
> >
> >       • instance Monad Maybe where
> >       •     return x = Just x
> >       •     Nothing >>= f = Nothing
> >       •     Just x >>= f  = f x
> >       •     fail _ = Nothing
> >
> > I am wondering about the implementation of function (>>=). Why don't it
> be Just x >>= f = Just (f x)?
> >
> > Any body knows about this?
>
> That would be the implementation of fmap for Maybe:
>
> instance  Functor Maybe  where
>     fmap _ Nothing       = Nothing
>     fmap f (Just a)      = Just (f a)
>
> so, different behavior.
>
> best,
> Miguel
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>



-- 
*Trung Nguyen*
Mobile: +45 50 11 10 63
LinkedIn: http://www.linkedin.com/pub/trung-nguyen/36/a44/187
View my blog at http://www.onextrabit.com/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20121220/e857be6c/attachment.htm>


More information about the Beginners mailing list