Прохождение документации Haskell всегда немного больно для меня, потому что вся информация, которую вы получаете о функции, часто не более чем просто: f a -> f [a]
, что может означать любое количество вещей.
Как и в случае функции <|>
.
Все, что мне дано, это: (<|>) :: f a -> f a -> f a
и что это "ассоциативная двоичная операция"...
При проверке Control.Applicative
я узнаю, что в зависимости от реализации он выглядит, по-видимому, несвязанными.
instance Alternative Maybe where
empty = Nothing
Nothing <|> r = r
l <|> _ = l
Хорошо, поэтому он возвращается вправо, если нет левого, иначе он возвращается влево, gotcha.. Это заставляет меня считать его "левым или правым" оператором, что имеет смысл с учетом использования |
и |
историческое использование как "ИЛИ"
instance Alternative [] where
empty = []
(<|>) = (++)
За исключением этого он просто вызывает оператор конкатенации списков... Прерывая мою идею...
Так что же это за функция? Каково его использование? Где он вписывается в великую схему вещей?