> > > > 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