[Haskell-beginners] Relation between monads and computations

Dmitriy Matrosov sgf.dma at gmail.com
Thu Feb 16 10:39:27 CET 2012


> > > > Now, using fucntions unitM and bindM there is possibly to convert arbitrary
> > > > function (k :: a -> b), which makes from initial value of type a value of type
> > > > b, into terms of general computation (represented by type M).
> > >
> > > Yes, (k :: a -> b) can be converted into a function of type  (a -> M
> > > b), but I think you have made it more complicated than necessary.  All
> > > you need to do is  (unitM . k).
> >
> > Hmm, so i was wrong here. Initially, i suppose, that the purpose of bindM is
> > to convert function of type (a -> b) into function of type (a -> M b), but now
> > i see it is wrong. Mentioned above quote from [2] says, that "the purpose of
> > bindM is to evaluate a computation, yielding a value.", which sounds a little
> > unfinished to me.  Then may be: the purpose of bindM is to make composition
> > of functions of type (a -> M b) and (b -> M c) possible. Is this
> > right?
>
> Yes!  In fact, there is a standard operator
>
>   (>=>) :: Monad m => (a -> m b) -> (b -> m c) -> (a -> m c)
>
> which is defined in terms of bind.  Implementing it is a good
> exercise.
>
> By the way, you may be interested in reading the Typeclassopedia:
>
>   http://www.haskell.org/haskellwiki/Typeclassopedia

Thank you very much, Brent! I'll try what you advise and read this link. And
then may be ask again.. :)

--
    Dmitriy Matrosov



More information about the Beginners mailing list