You will need monads. Let me change the type generateto:
generate :: (MonadRandom m) => String -> m String
generate, :
generate = fromList . probabilities
generate foo :
iterateM ( monad-loops)
iterateM :: Monad m => Int -> (a -> m a) -> a -> m a
iterateM 0 _ a = return a
iterateM n f a = f a >>= iterateM (n-1) f