Я новичок в haskell и читаю книгу «Научитесь хаскеллу». Я уже некоторое время пытаюсь переварить функторы и аппликативные функторы.
В теме о прикладных функторах реализация экземпляра для Maybe
дается как
instance Applicative Maybe where
pure = Just
Nothing <*> _ = Nothing
(Just f) <*> something = fmap f something
Итак, насколько я понимаю, мы получаем Nothing
, если левый функтор (для <*>
) равен Nothing. Мне кажется, что это имеет больше смысла, поскольку
Nothing <*> something = something
Так что этот аппликативный функтор не действует. Каков вариант использования, если он есть, для выдачи Nothing
?
Скажем, у меня с собой Maybe String
, значения которого я не знаю. Я должен передать это Maybe
сторонней функции, но хочу, чтобы ее результат сначала прошел через несколько Maybe (a -> b)
. Если некоторые из этих функций Nothing
, я хочу, чтобы они молча возвращали свой ввод, а не выдавали Nothing
, что означает потерю данных.
Итак, что же стоит за возвратом Nothing
в приведенном выше примере?
<|>
(который также находится вControl.Applicative
) - person Jeremy List   schedule 01.06.2015