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

Что это уравнение с лямбда-нотацией "m >> n = m >> =\_ → n" в объявлении monad?

class Monad m where
  return :: a -> m a
  (>>=)  :: m a -> (a -> m b) -> m b
  (>>)   :: m a -> m b -> m b
  m >> n = m >>= \_ -> n

  fail   :: String -> m a

Я никогда не видел формулы (или объявления функции?) в классе стилей раньше. Почему в классе есть уравнение?

Я знаю, что _ - это термин для соответствия чему-либо. но что m → =\_ → n соответствует?

4b9b3361

Ответ 1

Это реализация по умолчанию для метода. Если в объявлении экземпляра не содержится явная реализация (>>), это определение, которое будет использоваться. Способы по умолчанию широко распространены, если какой-либо метод может быть реализован с использованием другого метода, но потенциально могут быть более эффективные реализации для некоторых типов данных.

m >>= \_ -> n

означает, что "результат" m подается в функцию, игнорирующую его аргумент, и возвращает n неважно. Его также можно записать

m >>= const n

В контексте монад с эффектами он имеет m, чтобы иметь эффекты, но игнорировать возвращаемое значение, а затем n '. То, что (>>) предназначено для этого.