Подтвердить что ты не робот

Что означает строка в определении класса?

class (Monoid w, Monad m) => MonadWriter w m | m -> w where 
   pass   :: m (a,w -> w) -> m a 
   listen :: m a -> m (a,w) 
   tell   :: w -> m () 

В чем смысл трубы выше? Отрывок из здесь.

4b9b3361

Ответ 1

Фактически, это " функциональная зависимость". В этом случае это означает, что m однозначно идентифицирует w - тип m определяет тип w. (Это может быть лучшей ссылкой.)