Существуют ли человекоподобные имена для аппликативных (и друзей) методов?

В последнее время я использую аппликативный (и альтернативный) честный бит, и одна вещь, которая меня расстраивала, - это отсутствие знаний о номенклатуре. В качестве примера я хотел бы сказать function name вместо star thing для <*>. Таким образом, во многом так же, как >>= читается bind, существуют ли более человечные имена для следующего:

  • <*> - применить?
  • <* и *> - применяются левые и правые?
  • <$> - fmap?
  • <|>

а также стрелки

  • *** - split?
  • &&& - разветвление?

Если есть имена для них, мои поиски не раскрыли их. Я понимаю, что для них могут быть не приняты условия, но если есть, я хотел бы их узнать.

Ответ 1

Ну, <$> является синонимом fmap. Кроме того, название "аппликативный" заставляет меня думать о применении вещей. Поскольку <*> является основным оператором для этого, я думаю, что я свободно связываю его со словом "apply". Контекст немного отличается от обычного приложения с функциями, поэтому может быть некоторая путаница с этим словом, но контекст обычно делает его достаточно ясным, поэтому он работает для меня. <*> также является синонимом функции ap из Control.Monad, поэтому это подтверждает мое использование слова "apply".

Brent Yorgey Typeclassopedia - это то, где я узнал большую часть этого. Это выдающийся ресурс.

Ответ 2

Обозначения взяты из Doaitse Swierstra и Luc Duponcheel: они уже идентифицировали этот интерфейс для комбинаторов синтаксического анализатора, и мы чувствовали, что важно уважать их выбор там, где это имело смысл. Я пытаюсь вспомнить, как Doaitse произносит их, но рисует пробел.

Я предпочитаю, чтобы их видели и не слышали. На самом деле, я предпочитаю, чтобы они не были замечены, следовательно скобки идиомы. Но особенно при определении экземпляра полезно иметь имена. Не то, чтобы это было для меня, чтобы назвать их: вся Идиома против Аппликации против добра - знает, что шантаниганы были увлекательным изучением власти. Для чего это стоит, на моем собственном языке

  • <*> применяется (to) '(интерфейс "чистый и прикладной", как математика)
  • *> игнорируется
  • <* "игнорируется"
  • <$> "отображается (поверх)"
  • <$ возможно, "после", но я не ужасно сознаю, что называю это чем-то.

Основные идеи: эффекты всегда соответствуют последовательности (независимо от того, что это означает) слева направо; $или * сообщают вам, что их левое является чистым или идиоматическим; шевроны сообщают вам о результирующем потоке данных, указывая только на сигнал.

Альтернативная схема произношения, на уровне от отдельных операторов, может перевести

f <$> a <*> b <* c <*> d

в 'IDIOM: f, a, b, NOISE c, d' или некоторые такие. Но это действительно чтение версии скобки

(|f a b (-c-) d|)

вслух.

Я нахожу "деньги" и "splat" забавными, но мы можем сделать так, чтобы выделять семантику по сравнению с синтаксисами.

Ответ 3

Ну, нет стандартных имен, но иногда они называются:

  • <*> является "splat"
  • <$> - это деньги.

такое, что:

 f <$> g <*> x

произносится:

 f `money` g `splat` x

Условия, возникшие у Тревора Эллиота и Эрика Мертенса, я полагаю.