Haskell coding-style: map, fmap or <$>?

Is there any reason to prefer one of the following notations over the others or is this simply a matter of preference?

map toLower "FOO"

fmap toLower "FOO"

toLower <$> "FOO"

As an aside: I realize that <$> is the same as `fmap`. Am I right in the assumption that map is just a less general form of fmap?

36
задан Greg S 20 August 2010 в 08:55
поделиться

2 ответа

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

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

39
ответ дан 27 November 2019 в 06:04
поделиться

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

12
ответ дан 27 November 2019 в 06:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: