> 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