2010-08-08 3 views
11

Почему функция для перевода значения в функтор с именем pure в Control.Applicative?Именование функции `pure` в Control.Applicative

+4

Я голосую, чтобы закрыть этот вопрос как не по теме, потому что этот вопрос не связан с практической проблемой программирования, изложенной в [help/on-topic]. –

ответ

12

Подумайте о pure в качестве прилагательного.

foo <*> pure 4 = foo применяется на значении 4чистого.

(Что касается точной причине почему это называется pure, возможно только МакБрайд и Патерсон будет знать.)

+1

Спасибо. Я почему-то удивлялся * почему *, но если я понимаю вас правильно, это довольно произвольно. –

6

Это немного похоже на fromInteger. Его аргумент всегда является чистым значением или функцией, которая будет поднята в функтор. Возможно, это должно было быть fromPure, но вы знаете, как люди Haskell любят сокращать имена (например, fst и snd вместо first и second ...).

+0

Обратите внимание, что 'first' и' second' также являются функциями в 'Control.Arrow'. Я уверен, что они пришли позже. –

+1

Хм. Я думал, что 'fst' и' snd' пришли из ML, но это основано только на том, что ML старше Haskell. Быстрый поиск показывает документ [«ML под Unix на VAX»] (http://lucacardelli.name/Papers/MLUnix.pdf), который, как представляется, с середины 80-х годов (в нем нет ссылок, новее чем в 1983 году, и рассказывает, как установить ML с ленты). В документе используются 'fst' и' snd', поэтому похоже, что мое предположение было не слишком далеким. –

+1

'fst' и' snd' были в Haskell с тех пор, как я начал использовать этот язык (1992), а в 2000 году появилось стрелочки с бумажными вложениями Hughes. Я бы назвал функции стрелок 'onFirst' и' onSecond'. – yatima2975

Смежные вопросы