Haskell编码风格:map,fmap还是<$>?

Gre*_*g S 36 haskell functional-programming coding-style

有没有理由更喜欢以下其中一种符号而不是其他符号,或者这只是一个偏好问题?

map toLower "FOO"

fmap toLower "FOO"

toLower <$> "FOO"
Run Code Online (Sandbox Code Playgroud)

暂且不说:我意识到这<$>是一样的`fmap`.我是否正确的假设map只是一种不那么普遍的形式fmap

GS *_*ica 39

正如你所说,map是一种不那么普遍的形式fmap.如果你知道你有一个列表,那么我会使用map它,因为它使代码更清晰,如果你犯了错误,错误信息可能不那么令人困惑.但在很大程度上,这是一个偏好问题.

(<$>)是一样的fmap.在GHC 7.10之前它没有被Prelude导出,所以默认情况下不可用 - 但即使使用较旧的GHC版本,也很容易从中导入Data.Functor或者Control.Applicative这些日子它几乎是执行此操作的标准方法.

  • 并且`liftM`与`fmap`相同,除了它在`Monad`而不是'Functor`上重载. (15认同)
  • [**`liftA`**](http://hackage.haskell.org/package/base-4.7.0.1/docs/Control-Applicative.html#liftA)也是[**`Applicative`*的推广*Functors](http://hackage.haskell.org/package/base-4.7.0.1/docs/Control-Applicative.html) (2认同)

Nei*_*own 12

我同意Ganesh map对列表更清楚.我用<$>fmap,除非是部分应用.所以我fmap reverse用来声明一个函数来反转某个仿函数的所有元素,但如果我有所有可用的参数(例如,如果我在一个do块中写一行),我倾向于使用运算符形式:reverse <$> f x