Есть ли понятные человеку имена для аппликативных (и друзей) методов? - PullRequest
8 голосов
/ 29 апреля 2011

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

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

и аналогично стрелкам

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

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

Ответы [ 3 ]

10 голосов
/ 01 мая 2011

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

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

  • <*> «применяется (к)» (интерфейс «чистый и прикладной», как математика)
  • *>«игнорируется»
  • <* «игнорируется»
  • <$> «сопоставлен» (over)
  • <$ возможно «после», но яя не очень-то осознаю, что это называется

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

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

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

в 'IDIOM: f,a, b, ШУМ c, d 'или что-то подобное.Но это действительно читает вслух брекет-версию

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

.

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

7 голосов
/ 30 апреля 2011

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

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

5 голосов
/ 29 апреля 2011

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

  • <*> это "сплат"
  • <$> это "деньги"

такой, что:

 f <$> g <*> x

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

 f `money` g `splat` x

Термины, выдвинутые Тревором Эллиоттом и Эриком Мертенсом, я считаю.

...