В Haskell почему есть подпись типа forever
forever :: Monad m => m a -> m b
В частности, почему это не просто :: Monad m => m a -> m a
?
Разумеется, тип монады, на которую мы воздействуем, не меняется на полпути через forever
?
Функция, такая как:
forever' :: Monad m => m a -> m a
forever' = forever
похоже, работает точно так же.