Подтвердить что ты не робот

Стиль кодировки Haskell: map, fmap или <$>?

Есть ли причина предпочесть одну из следующих обозначений над другими или это просто вопрос предпочтения?

map toLower "FOO"

fmap toLower "FOO"

toLower <$> "FOO"

В стороне: я понимаю, что <$> совпадает с `fmap`. Правильно ли я в предположении, что map является лишь менее общим видом fmap?

4b9b3361

Ответ 1

Как вы говорите, map является менее общей формой fmap. Если вы знаете, что у вас есть список, я бы использовал map, поскольку он делает код более четким, и если вы допустили ошибку, сообщение об ошибке, вероятно, будет менее запутанным. Однако в значительной степени это вопрос предпочтения.

(<$>) совпадает с fmap. До тех пор, пока GHC 7.10 не был экспортирован прелюдией, поэтому он не был доступен по умолчанию - но даже с более старыми версиями GHC легко импортировать из Data.Functor или Control.Applicative, и в наши дни это в значительной степени стандартный способ сделать это.

Ответ 2

Я согласен с Ganesh, что map более ясен для списков. Я использую <$> над fmap, если он не применяется частично. Поэтому я бы использовал fmap reverse для объявления функции, которая меняет все элементы некоторого функтора, но если у меня есть все доступные аргументы (например, если я пишу строку в блоке do), я, как правило, использую форму оператора: reverse <$> f x