> whereas under 1.3 fixity it parses as:
> 
> > main :: IO ()
> > main = f >>
> >        (dropOut cond1 $
> >         (g >>
> >          (dropOut cond2 $
> >           h)
> >
> > dropOut :: Bool -> IO () -> IO ()
> > dropOut gotError cont | gotError  = return ()
> >                       | otherwise = cont
> 
> which is what we want.

I've had exactly this problem too.

It looks as if we would like

                        f >>= g >>= h   
to parse as
                        (f >>= g) >>= h

but we'd like

                        f >> g >> h
to parse as
                        f >> (g >> h)


The solution looks to be to
        make    >> right associateive
        and     >>= left associative

What predence should >> have?  Well if we want:

        f1 $ g >> h $ h2 = f $ (g >> (h $ h2))

as Graeme and I often do, then it has to be infixr 0.


All right.  

        Proposal: make >> infixr 0.  

Can anyone see any reason this would be a Bad Thing?

Simon


Reply via email to