> test3 :: MonadState Integer m => String -> m String Good point. It's interesting that this allows the signature of test5b to become MonadState Integer m => m Integer (instead of (Monad m) => StateT Integer (StateT String m) Integer) which is more general, and (surprisingly to me) does not mention String. Thank! Luis