Почему экземпляр Applicative для Maybe не дает Nothing, если функция Nothing в <*>

Я новичок в haskell и читаю книгу Learn you a haskell. Я уже некоторое время пытаюсь переварить функторы и аппликативные функторы.

В теме аппликативных функторов реализация экземпляра для Maybe задается как

instance Applicative Maybe where
  pure = Just
  Nothing <*> _ = Nothing
  (Just f) <*> something = fmap f something

Итак, насколько я понимаю, мы получаем Nothing , если левосторонний функтор (для <*> ) Ничего. Мне кажется, что это имеет больше смысла как

  Nothing <*> something = something

, так что этот аппликативный функтор не действует. Каков вариант использования, если он есть, для выдачи Nothing ?

Скажем, у меня есть Maybe String , значение которой я не знаю. Я должен передать это Maybe сторонней функции, но хочу, чтобы ее результат сначала прошел через несколько Maybe (a -> b) . Если некоторые из этих функций Nothing , я хочу, чтобы они молча возвращали свой ввод, а не выдавали Nothing , что означает потерю данных.

Итак, какова логика возврата Nothing в приведенном выше примере?

14
задан Shrikant Sharat 24 December 2011 в 19:20
поделиться