michael rice nowgate at yahoo.com
Wed Apr 29 11:47:33 EDT 2009

```Hi Yitz,

Since I'm trying to learn Monads, let's look at this as a teaching moment. The example code (see below), which I pulled off YAMT (Yet Another Monad Tutorial ;-)), is the source of my 'comb' function.

I understand the code as it now stands, and I understand that the Prelude (>>=) would replace the 'comb'. Adding whatever statements are needed, how would you "specialize" the (>>=) to Maybe and solve this particular problem.

Michael

--- On Wed, 4/29/09, Yitzchak Gale <gale at sefer.org> wrote:

From: Yitzchak Gale <gale at sefer.org>
To: "michael rice" <nowgate at yahoo.com>
Date: Wednesday, April 29, 2009, 4:30 AM

Michael Rice wrote:
> -- comb is a combinator for sequencing operations that return Maybe
> comb :: Maybe a -> (a -> Maybe b) -> Maybe b
> comb Nothing  _ = Nothing
> comb (Just x) f = f x

comb is essentially the same as something in the Prelude:
it is just (>>=) specialized to Maybe.

(>>=) :: Monad m => m a -> (a -> m b) -> m b

> Now what am I misunderstanding in the code below?
> lst = [('A',65),('B',66),('C',67),('D',68)]

Brandon S. Allbery wrote:
> ...it defaulted to [(Char,Integer)].  This is a manifestation
> of the Monomorphism Restriction...

While it may be debatable whether the Monomorphism
Restriction is helpful in compiled code, it is unquestionably
a major nuisance at the GHCi prompt, for this and other
reasons.

I highly recommend that you create a .ghci file in your home
directory containing the line:

:set -XNoMonomorphismRestriction

In my opinion, MR should be off by default in GHCi.

-Yitz

-------------- next part --------------
An HTML attachment was scrubbed...