Is there a way to perform a case on the value stored within a monad without having to bind a name to it?

i.e. instead of doing this:

c <- getChar
case c of
  ...

Is there a way to do this:

mcase getChar of
  ...

Alternatively, it would be nice if the case statement could be partially applied so:

case of
  ...

would be desugared to:

\a -> case a of
  ...

So you could do this:

getChar >>= case of
              ...
Edit
Report