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
?
Как вы говорите, map
- это менее общая форма fmap
. Если вы знаете, что у вас есть список, то я бы использовал map
, так как это делает код более понятным, и если вы допустите ошибку, то сообщение об ошибке будет менее запутанным. Однако в значительной степени это вопрос предпочтений.
(<$>)
- это то же самое, что fmap
. До GHC 7.10 он не экспортировался прелюдией, поэтому не был доступен по умолчанию - но даже в старых версиях GHC его легко импортировать из Data.Functor
или Control.Applicative
, а в наши дни это практически стандартный способ.
Я согласен с Ганешем в том, что карта
более понятна для списков. Я использую <$>
вместо fmap
, если это не применяется частично. Поэтому я бы использовал fmap reverse
, чтобы объявить функцию, которая переворачивает все элементы некоторого функтора, но если у меня есть все доступные аргументы (например, если я пишу строку в do
блок) Я обычно использую операторную форму: reverse <$> fx