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
No, not really, but you can move the case into another function and apply it to the result of a monadic action.
f x = case x of ... main = do f <$> getChar
Alternativly, the following is possible:
getChar >>= \x -> case x of ...