
Juan Carlos Arevalo Baeza wrote:
Another case where I encounter this is with the "when" function:
myParser2 :: Bool -> Parser () myParser2 all = do string "Hello" when all $ do string ", world" string "!"
I made a function (did I miss one in the base package?) ignore :: Monad m => m a -> m () ignore m = m >> return() and write "ignore $ string "..." if necessary. "when b m" is "if b then m else return()". I don't think that the then- or else- branch of any if- expression schould be automatically casted to some matching type "m ()" (and I don't know what implications this would have to typing in general). However "when b m" could be generalized by "if b then ignore m else return ()". (The same applies to "unless") Cheers Christian